首页 > 解决方案 > 使用 MSAL 获取索赔

问题描述

我正在使用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!
        {

        

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

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

标签: c#azureazure-active-directorymsalmicrosoft-identity-platform

解决方案


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

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

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

3.之后,您需要执行我已在评论中提供的本文档中的步骤。在服务应用程序而不是客户端应用程序中执行此操作。

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

5.现在您可以roles在访问令牌中找到声明。 在此处输入图像描述


推荐阅读