c# - 使用 MSAL 获取 claim

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

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

这有效:

   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!
        {

        

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

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

最佳答案

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

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

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

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

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

5. 现在您可以找到声明 roles在您的访问 token 中。 enter image description here

关于c# - 使用 MSAL 获取 claim ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65218817/

相关文章:

sql - Azure 数据库连接错误。

azure - 通过使用 Azure AD 的代表流来限制用户范围

c# - 使用非默认构造函数创建运行时确定类型的对象

c# - 无法在 gridview 中打开超链接位置

azure - 如何处理Azure存储Blob容器和云Blob的依赖异常?

windows - 在 Azure 中开始一个空白的 Web 角色项目?

azure - 在 Azure Active Direct 上注册应用程序时,我应该使用哪个 "redirect URI"或 "Sign-on URL"?

azure - Az CLI - 注册 Azure AD B2C 应用程序

c# - Windows 窗体应用程序中的左菜单选项卡控件我怎样才能得到它?它在当前控件中可用吗?

c# - VSTO 加载项 + Open XML