我使用OnlineIdAuthenticator类来获取身份验证令牌以登录Azure App Services,但我无法获取NameIdentifier声明服务器端。我需要Id来唯一标识用户并将其存储在数据库中。
我想使用OnlineIdAuthenticator启用单点登录,因此每次启动我的应用程序(Windows应用商店应用)时都不会提示用户登录。
我在我的应用中使用此方法获取令牌并登录:
protected override async Task<bool> LoginAsync()
{
var authenticator = new OnlineIdAuthenticator();
var mobileServicesTicket = new OnlineIdServiceTicketRequest("myapp.azurewebsites.net", "JWT");
var ticketRequests = new List<OnlineIdServiceTicketRequest>() { mobileServicesTicket };
var authResult = await authenticator.AuthenticateUserAsync(ticketRequests, CredentialPromptType.PromptIfNeeded);
if ((authResult.Tickets.Count == 1) && (authResult.Tickets[0].ErrorCode == 0))
{
var accessToken = authResult.Tickets[0];
var token = new JObject();
token.Add("authenticationToken", accessToken.Value);
var _mobileServiceClient = ServiceLocator.Current.GetInstance<IMobileServiceClient>();
var user = await _mobileServiceClient.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount, token);
return true;
}
else
{
return false;
}
}
服务器端我使用此方法获取唯一ID:
public static async Task<string> GetUserId(IPrincipal pricipal, HttpRequestMessage request)
{
ProviderCredentials credentials = await pricipal.GetAppServiceIdentityAsync<MicrosoftAccountCredentials>(request);
return credentials.Provider + ":" + credentials.Claims[ClaimTypes.NameIdentifier];
}
上面的声明集合包含以下键:
ver,iss,exp,uid,aud,urn:microsoft:appuri,urn:microsoft:appid
其他一切似乎都有效。我可以使用我的MicrosoftAccount登录,我可以调用需要身份验证的方法,但我只是无法生成用户ID。
如何在Claims集合中获取NameIdentifier?