Azure AD承载令牌-获取用户标识符

时间:2018-08-12 21:31:54

标签: asp.net .net asp.net-mvc asp.net-core azure-active-directory

我有一个使用AzureADBearer身份验证方法保护的ASP.NET Core API。

以下是我们的示例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore

使用此方法使用ADAL.net生成的承载令牌来保护对API的调用。

    private async Task<string> getToken()
    {
        AuthenticationResult result = null;
        string userObjectID = (User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;

        // Using ADAL.Net, get a bearer token to access the TodoListService
        AuthenticationContext authContext = new AuthenticationContext(AzureAdOptions.Settings.Authority, new NaiveSessionCache(userObjectID, HttpContext.Session));
        ClientCredential credential = new ClientCredential(AzureAdOptions.Settings.ClientId, AzureAdOptions.Settings.ClientSecret);

        result = await authContext.AcquireTokenAsync(AzureAdOptions.Settings.TodoListResourceId, credential);


        return result.AccessToken;
    }

但是,当我查看API收到的声明时,没有显示为用户唯一的标识符。对于为其生成令牌的每个用户,Nameidentifier声明都是相同的。

以上代码中生成的objectid是令牌生成中唯一的唯一方面,在API令牌的解构表示的声明中似乎无关紧要。

关于如何获取各种用户唯一ID到API的任何想法?那可能是电子邮件,我可以使用的SID。

1 个答案:

答案 0 :(得分:1)

{|}~-]+(?:\.[a-z0-9!##$%&'*+/=?^_上有一个声明,密钥为AccessTokenoid。这是一个不变的GUID,可以唯一地将用户标识为Azure对象。

请看此Object ID解码的用户令牌示例,该示例由JSON Web Token使用Azure ADSingle page application的隐式授予流生成。

注意:出于隐私原因,某些项目已提交并更改。

MSAL.js