亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AspNet 用戶聲明失蹤

AspNet 用戶聲明失蹤

C#
皈依舞 2023-08-20 11:01:31
研究身份提供者的概念證明并需要幫助理解 aspnet 身份的一些細微差別,特別是與用戶聲明相關的細微差別。我正在努力實現的目標:1) 公開一個 MVC 應用程序,該應用程序提供對將公開體育和運動員數據的 2 個微服務之一的安全訪問。2) 允許本地用戶帳戶和外部帳戶(例如 google 或 facebook auth)。當前設置:1) 利用 Identity Server 4 進行身份驗證的 Asp.Net MVC 應用程序。2) 兩個 Web Api 2 Web 服務(1 個用于體育運動,1 個用于運動員)。Sports API 不安全...即...開放 API。不過,運動員 API 應通過基于策略的授權來保護。3) Identity Server 4 Web 應用程序,通過 IdentityServer4 nuget 包利用實體框架和 ASP.NET Identity。4) SQL Server 數據庫“完全”配置為 api 資源、身份資源、客戶端、幾個具有不同角色和聲明的測試用戶進行測試。目前有效的方法:1)所有用戶都可以登錄(本地和谷歌)2) 聲明似乎正在按我的預期加載(仍在努力理解 Identity Server 數據模型中聲明表的所有關系)。3) MVC 應用程序顯示 id_token、access_token、refresh_token,然后循環遍歷用戶的聲明并顯示這些內容。什么不起作用:1) 并非所有我認為應該在 mvc 應用程序中顯示的聲明都實際顯示。我的意思的例子:1) 在下面的第一個屏幕截圖中,您可以看到給定的名稱和家庭名稱作為用戶“bob”的聲明。這是在 MVC razor 中使用以下代碼片段顯示的:@if (User.Identities.First().IsAuthenticated){    <h1>Tokens:</h1>    <dt>id token</dt>    <dd>@await ViewContext.HttpContext.GetTokenAsync("id_token")</dd>    <dt>access token</dt>    <dd>@await ViewContext.HttpContext.GetTokenAsync("access_token")</dd>    <dt>refresh token</dt>    <dd>@await ViewContext.HttpContext.GetTokenAsync("refresh_token")</dd>    <br />    <h1>Claims:</h1>    <dl>        @foreach (var claim in User.Claims)        {            <dt>@claim.Type : @claim.Value</dt>        }    </dl>}2) 在第二個屏幕截圖中,您可以看到身份服務器生成的訪問令牌中包含的其他“聲明”。例如,“權限”、“測試”、“角色”、“testingroleclaim”和“oddball”。除了一些地方之外,大部分代碼都直接來自 Identity Server 4 文檔的快速入門教程。根據我讀到的所有內容,為了包含自定義聲明,您需要實現自己的 IProfileService 接口實例。我已經這樣做了,它似乎按預期工作。以下是代碼和屏幕截圖,顯示調試器中加載的“其他”聲明:
查看完整描述

1 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

客戶端應用程序負責在連接 openid 中間件時設置 OpenIdConnect 選項。選項對象的屬性之一稱為“ClaimActions”。這些聲明操作允許客戶端連接自定義映射屬性。

以下是我添加到客戶端啟動類中的代碼,以使該代碼適用于一組自動序列化的聲明。

services.AddAuthentication(options =>

{

? ?options.DefaultScheme = "Cookies";

? ?options.DefaultChallengeScheme = "oidc";

})

.AddCookie("Cookies")

.AddOpenIdConnect("oidc", options =>

{? ? ? ? ? ? ? ? ? ??

? ? options.SignInScheme = "Cookies";


? ? options.Authority = "http://localhost:5000";

? ? options.RequireHttpsMetadata = false;


? ? options.ClientId = "mvc";

? ? options.ClientSecret = "secret";

? ? options.ResponseType = "code id_token";


? ? options.SaveTokens = true;

? ? options.GetClaimsFromUserInfoEndpoint = true;


? ? options.Scope.Add("athlete.full");

? ? options.Scope.Add("rights");

? ? options.Scope.Add("email");

? ? options.Scope.Add("address");

? ? options.Scope.Add("phone");


? ? options.Scope.Add("offline_access");


? ? // These are what allowed the claims to be serialized for front-end consumption.

? ? options.ClaimActions.MapJsonKey(JwtClaimTypes.WebSite, "website");

? ? options.ClaimActions.MapJsonKey(JwtClaimTypes.Gender, "gender");

? ? options.ClaimActions.MapJsonKey(JwtClaimTypes.BirthDate, "birthdate");

});


查看完整回答
反對 回復 2023-08-20
  • 1 回答
  • 0 關注
  • 129 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號