asp.net - Azure AD 不记名 token - 获取用户标识符

标签 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 生成的不记名 token 可保护对 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 声明对于我为其生成 token 的每个用户都是相同的。

在上述代码中生成的 objectid - 是 token 生成中唯一独特的方面,并且在 token 的 API 解构中表示的声明中似乎无关紧要。

关于如何通过 API 获取任何类型的用户唯一 ID 有什么想法吗?这可能是电子邮件,SID 任何我可以使用的东西..

最佳答案

AccessToken 上有一个声明,其 key 写为 oidObject ID。它是一个不可变的 GUID,可将用户唯一标识为 Azure 对象。

查看此已解码的 JSON Web token 示例,它是 Azure AD单页应用程序 生成的隐式授权流使用 MSAL.js

Note: Some items were omitted and changed for privacy reasons.

{
  "aud": "<app registration guid>"
  "iss": "https://login.microsoftonline.com/<tenant id>/v2.0",
  "iat": 1606857684,
  "nbf": 1606857684,
  "exp": 1606861584,
  "name": "developer",
  "oid": "<Object ID>",
  "preferred_username": "dev@foo.bar",
  "sub": "RePapB10ksij8FA7dv-GdO9u4tz0_Hm4mmSeuGcqByY",
  "tid": "<tenant id>"
  "ver": "2.0"
}

关于asp.net - Azure AD 不记名 token - 获取用户标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51813036/

相关文章:

asp.net - Hangfire 如何处理应用程序域重启?

c# - 代码契约(Contract)不检查空条件。为什么?

c# - 无法从 ASP.NET MVC 中的 IEnumerable 获取 JSON

asp.net - Fluent NHibernate,动态改变映射表?

asp.net - 我可以使用Environment.GetEnvironmentVariable方法从Azure应用程序设置中读取环境变量吗?

ASP.Net HTTP2 PushPromise 很慢

c# - Roslyn TypeDeclarationSyntax、MethodDeclarationSyntax、FieldDeclarationSyntax 具有公共(public)属性但没有公共(public)基类或接口(interface)

c# - MVC Razor 字符问题

javascript - 捕获太长的表单提交

c# - 如何在 VS2008 和 SQL Server CE 上基于现有的 .sdf 文件创建空的本地数据库