提供程序与Azure活动目录令牌的详细信息

本文关键字:令牌 详细信息 活动 程序 Azure | 更新日期: 2023-09-27 18:02:03

我使用google和microsoft帐户进行azure活动目录认证。从AAD进行身份验证后,它返回访问令牌。我们正在传入请求头。在令牌的基础上,我想获得当前提供商的详细信息。这是可能的得到用户的细节在web api代码与令牌的帮助,我在头部传递?

提供程序与Azure活动目录令牌的详细信息

您可以从/.auth/me端点获得各种信息。由于您正在使用Azure移动应用程序与Xamarin表单:

为索赔建立模型:

using System.Collections.Generic;
using Newtonsoft.Json;
namespace TaskList.Models
{
    public class AppServiceIdentity
    {
        [JsonProperty(PropertyName = "id_token")]
        public string IdToken { get; set; }
        [JsonProperty(PropertyName = "provider_name")]
        public string ProviderName { get; set; }
        [JsonProperty(PropertyName = "user_id")]
        public string UserId { get; set; }
        [JsonProperty(PropertyName = "user_claims")]
        public List<UserClaim> UserClaims { get; set; }
    }
    public class UserClaim
    {
        [JsonProperty(PropertyName = "typ")]
        public string Type { get; set; }
        [JsonProperty(PropertyName = "val")]
        public string Value { get; set; }
    }
}

然后使用以下命令获取声明:

List<AppServiceIdentity> identities = null;
public async Task<AppServiceIdentity> GetIdentityAsync()
{
    if (client.CurrentUser == null || client.CurrentUser?.MobileServiceAuthenticationToken == null)
    {
        throw new InvalidOperationException("Not Authenticated");
    }
    if (identities == null)
    {
        identities = await client.InvokeApiAsync<List<AppServiceIdentity>>("/.auth/me");
    }
    if (identities.Count > 0)
        return identities[0];
    return null;
}

提供者和提供者令牌在模型中。提供程序返回的任何声明都在UserClaims对象中,您可以使用LINQ访问该对象。例如,要检索名称:

var identity = await service.GetIdentityAsync();
if (identity != null) {
    name = identity.UserClaims.FirstOrDefault(c => c.Type.Equals("name")).Value;
}

您可以从我的书中获得更多信息:https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter2/authorization/