C# 使用OnlineIdAuthenticator在Azure应用程序服务中获取NameIdentifier声明
我正在使用OnlineIdAuthenticator类获取身份验证令牌,以便登录Azure应用程序服务,但我无法获取NameIdentifier声明服务器端。我需要唯一标识用户并将其存储在数据库中的Id 我想使用OnlineIdAuthenticator启用单点登录,这样用户不会在每次启动我的应用程序(Windows应用商店应用程序)时都被提示登录 我在应用程序中使用此方法获取令牌并登录:C# 使用OnlineIdAuthenticator在Azure应用程序服务中获取NameIdentifier声明,c#,win-universal-app,azure-web-app-service,claims,azure-mobile-services,C#,Win Universal App,Azure Web App Service,Claims,Azure Mobile Services,我正在使用OnlineIdAuthenticator类获取身份验证令牌,以便登录Azure应用程序服务,但我无法获取NameIdentifier声明服务器端。我需要唯一标识用户并将其存储在数据库中的Id 我想使用OnlineIdAuthenticator启用单点登录,这样用户不会在每次启动我的应用程序(Windows应用商店应用程序)时都被提示登录 我在应用程序中使用此方法获取令牌并登录: protected override async Task<bool> LoginAs
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;
}
}
protectedoverride异步任务LoginAsync()
{
var authenticator=新的OnlineIdAuthenticator();
var mobileServicesTicket=新的OnlineIdServiceTicketRequest(“myapp.azurewebsites.net”、“JWT”);
var ticketRequests=new List(){mobileServicesTicket};
var authResult=等待验证者.AuthenticateUserAsync(ticketRequests,CredentialPrompType.PromptifNeed);
if((authResult.Tickets.Count==1)和&(authResult.Tickets[0].ErrorCode==0))
{
var accessToken=authResult.Tickets[0];
var token=new JObject();
添加(“authenticationToken”,accessToken.Value);
var_mobileServiceClient=ServiceLocator.Current.GetInstance();
var user=wait_mobileServiceClient.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount,令牌);
返回true;
}
其他的
{
返回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];
}
publicstaticasync任务GetUserId(IPrincipal pricipal,HttpRequestMessage请求)
{
ProviderCredentials credentials=await pricipal.GetAppServiceIdentityAsync(请求);
返回凭据。提供程序+:“+凭据。声明[ClaimTypes.NameIdentifier];
}
上面的索赔集合包含以下密钥:
版本、iss、exp、uid、aud、urn:microsoft:appuri、urn:microsoft:appid
其他一切似乎都起作用了。我可以使用我的MicrosoftAccount登录,也可以调用需要身份验证的方法,但我无法生成用户id
如何在索赔集合中获取NameIdentifier