【问题标题】:Getting claims using MSAL使用 MSAL 获取索赔
【发布时间】:2021-03-20 22:46:15
【问题描述】:

我正在使用Microsoft.Identity.Claim 库来连接天蓝色并验证用户。 我的第一个想法是使用AcquireTokenByIntegratedWindowsAuth 方法,但这需要几天时间,直到网络管理员人员调查如何启用单点登录选项并更改该用户现在是“联合”而不是“管理”。所以我现在切换到AcquireTokenInteractive方法,因为你很可能会登录,所以他只需要从自动打开的浏览器中选择帐户就可以了。没什么大不了的。

这行得通:

   string clientId = "xxx";
            var tenantId = "yyy";
              string[] scopes = new string[] { "User.Read", "User.ReadBasic.All"};

        AuthenticationResult result;

        var app = PublicClientApplicationBuilder.Create(clientId)
                                                 .WithRedirectUri("http://localhost")
                                                 .WithAuthority(AzureCloudInstance.AzurePublic, tenantId).Build();
        try
        {
            result = await app.AcquireTokenInteractive(scopes)
                      .ExecuteAsync();
        }
        catch (MsalUiRequiredException) //see all possibl exceptions!
        {

        

但是,我没有收到令牌内的声明。 我的想法是将此令牌发送到服务器,然后对其进行验证,如果成功在数据库中创建用户,然后使用我自己的身份验证机制用于其他用户(不是域的一部分,完全独立的用户)。 但我不希望域中的所有用户都可以访问这个应用程序。 所以我想得到要求,角色......

如何获得声明,使用这个或任何其他给定用户电子邮件的库,或其他一些独特的数据?

【问题讨论】:

  • 您好,请问您获得访问令牌后要请求哪个api?请求受 AD 保护的 Web 应用程序 api 或请求图形 api。看来您已将 microsoft graph 权限("User.Read", "User.ReadBasic.All")添加到 scopes
  • 我只想请求一种匿名非保护方法来使用“我的”现有身份验证方法登录用户?为什么,因为我已经拥有它并且它需要数据库中的用户。所以,我的想法是在数据库中插入用户,如果它具有良好的 AD 角色并从该用户生成 jwt 令牌,我已经有基础架构代码
  • 我不太清楚你的描述。据我了解,您的要求是在访问令牌中检查声明roles,但您找不到声明roles,对吧?
  • 是的。我想从那个 API 中获取角色。然后我会知道用户是否有权访问我的应用程序
  • 如果您在访问令牌中找不到声明roles,可能是因为您在scopes 中添加了microsoft graph 权限("User.Read", "User.ReadBasic.All")。

标签: c# azure azure-active-directory msal microsoft-identity-platform


【解决方案1】:

在这里我总结了您可能需要遵循的所有步骤:

1.您的服务应用需要在azure ad中注册一个应用,可以参考这个document

2.然后您需要在广告中注册另一个应用程序作为客户端应用程序,您可以按照document中的步骤进行操作

3. 之后,您需要执行我已经在 cmets 中提供的 document 中的步骤。在服务应用而不是客户端应用中执行此操作。

4. 然后您可以使用您的代码获取访问令牌并检查声明roles。请注意,不要在代码中将 microsoft graph 权限添加到 scopes 中。您需要将api://<the client id of the registered app for service app>/.default 添加到scopes

5. 现在您可以在访问令牌中找到声明roles

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 2020-04-02
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多