当前位置: 首页 > 知识库问答 >
问题:

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

微生德泽
2023-03-14

使用由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解构造中表示的声明中,这似乎并不重要。

共有1个答案

蒲昊
2023-03-14

accessToken上,有一个声明,其密钥写为oidobject id。它是一个不可变的GUID,将用户唯一标识为Azure对象。

查看这个解码的JSON Web令牌示例,该示例是由Azure AD隐式授权流使用msal.js单页应用程序生成的用户令牌。

注:部分项目因隐私原因被省略和更改。

json prettyprint-override">{
  "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"
}
 类似资料:
  • 我正在运行一个Cordova应用程序,它连接到一个承载在Azure上的Web API。我已经使用Azure AD承载身份验证保护了API。当用户试图调用其中一个endpoint时,他会被转发到Azure广告登录页面,输入他的凭据,然后得到令牌。该令牌将添加到API的所有后续请求中。我正在使用mobile apps客户端SDK(cordova-plugin-ms-azure-mobile-apps)

  • 我在调用rest api时尝试使用承载令牌时遇到一些问题。 我尝试了两种方法,结果相同: 我在azure门户中创建了一个应用注册,并授予它使用devops api进行用户模拟的权限。 我在中创建了一个应用程序https://app.vsaex.visualstudio.com/并授予it项目/团队管理权限。 对于我的代码,我使用了这个(当我使用PAT进行身份验证时有效) 我使用以下示例获取令牌:h

  • 我正在Laravel应用程序中使用twitter API。在我的应用程序中,当用户插入url时,我想获得用户名和个人资料图片。我找了很多,但没找到。对于用户信息,我必须让用户登录到twitter,并与我的应用程序连接以获取访问令牌。我只想使用应用程序授权,这样用户就不需要登录twitter。我发现,通过这个搜索API可以搜索带有承载令牌的推文 有什么API可以让我使用URL获取用户屏幕名称吗? 我

  • 在Postman中,我可以使用 回调URL Auth URL 客户端ID 我如何使用C#代码做同样的事情?

  • 我刚刚发现的是AcquireTokenOnBehalfOfAsync为不同的注册本机应用程序提供了v1或v2。我找不到这两个应用程序在azure上的配置有什么不同。

  • 我目前正在使用Postman来生成承载令牌,我正在自动化测试中使用它。现在,我也想使用Java中的REST Assured来自动化承载令牌生成过程。请帮帮我.谢了。