![](/img/trans.png)
[英]How to Integrate existing Azure AD B2C into a Xamarin forms app using MSAL?
[英]Getting Azure B2C SignUpSignIn Application Claims using MSAL in Xamarin.Forms
我正在創建一個 Xamarin.Forms 應用程序,使用 Azure B2C 和 MSAL( Microsoft.Identity.Client
NuGet 包)對用戶進行身份驗證。 當應用程序打開時,我嘗試使用以下代碼在后台對它們進行身份驗證:
AuthenticationResult ar;
ar = await App.AuthenticationClient.AcquireTokenSilentAsync(Scopes,
userIdentifier, Authority,
SignUpSignInpolicy, false);
如果失敗,應用程序會切換並使用標准的AquireTokenAsync()
方法對它們進行身份驗證。
AuthenticationResult ar;
ar = await App.AuthenticationClient.AcquireTokenAsync(Config.Scopes,
"", UiOptions.SelectAccount,
string.Empty, null, Config.Authority,
Config.SignUpSignInpolicy);
我正在使用的SignUpSignInpolicy
具有電子郵件、名字和姓氏、對象 ID 和生日的應用程序聲明,這是一個自定義字符串屬性。
我想要做的是獲取經過身份驗證的用戶的電子郵件、姓名和生日(如果他們必須登錄),以便我可以從該數據創建一個用戶對象,該對象將在整個應用程序中使用。 有沒有辦法從AuthenticationResult
獲取這些數據? 如果沒有,我該如何檢索SignUpSignIn
應用程序聲明? 我是身份驗證的新手,所以我可能遺漏了一些重要的東西。
您通過應用程序聲明刀片配置的聲明包含在id token 中。
id 令牌可通過AuthenticationResult的IdToken屬性獲得。 IdToken 是 Base64 編碼的 JWT,您可以通過實例化JwtSecurityToken類來訪問它。 此類將使您可以通過 Claims 屬性訪問聲明。
注意:為了訪問 JwtSecurityToken 類,您需要包含System.IdentityModel.Tokens.Jwt nuget 包。
下面是一些示例代碼,可幫助您檢索給定的聲明。:
var claimName = "given_name"; // This could also be any of your custom attributes, e.g. "extension_gamertag"
authResult = await client.AcquireTokenAsync(Config.Scopes,
"", UiOptions.SelectAccount,
string.Empty, null, Config.Authority,
Config.SignUpSignInpolicy);
var jwt = new JwtSecurityToken(authResult.IdToken);
Console.WriteLine(jwt.Claims.First(c => c.Type == claimName).Value);
編輯 2017-03-17由於 System.IdentityModel.Tokens.Jwt 不適用於 Xamarin/PCL,您可以使用 Newtonsoft.Json nuget 包(使用 Newtonsoft.Json.Linq)自己處理令牌;
var jwtPayloadEnc = authResult.IdToken.Split('.')[1];
var jwtPayload = Encoding.UTF8.GetString(System.Convert.FromBase64String(jwtPayloadEnc));
var payload = JObject.Parse(jwtPayload);
Console.WriteLine(payload[claimName].ToString());
編輯 2021-12-07 (以及之后的大流行)根據Olias下面的評論,對於 Xamarin,您可以使用:
var jwt = new JwtSecurityToken(authResult.IdToken);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.