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