使用 MSAL 获取声明

Getting claims using MSAL

我正在使用 Microsoft.Identity.Claim 库连接到 azure 并对用户进行身份验证。 我的第一个想法是使用 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!
        {

        

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

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

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

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

2.然后你需要在广告中注册另一个应用作为客户端应用,你可以按照这个document

中的步骤

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

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

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