c# - 使用 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!
{
但是,我没有收到令牌内的索赔。我的想法是将此令牌发送到服务器,然后对其进行验证,如果成功在数据库中创建用户,然后使用我自己的身份验证机制用于其他用户(不是域的一部分,完全独立的用户)。但我不希望域中的所有用户都可以访问这个应用程序。所以我想得到索赔,角色......
如何获得索赔,使用这个或任何其他给定用户电子邮件的库,或其他一些独特的数据?
解决方案
在这里,我总结了您可能需要遵循的所有步骤:
1.您的服务应用需要在azure ad中注册一个应用,可以参考这个文档
2.然后你需要在广告中注册另一个应用程序作为客户端应用程序,你可以按照本文档中的步骤进行操作
3.之后,您需要执行我已在评论中提供的本文档中的步骤。在服务应用程序而不是客户端应用程序中执行此操作。
4.然后您可以使用您的代码获取访问令牌并检查声明roles
。请注意,不要scopes
在代码中添加 microsoft graph 权限。您需要添加api://<the client id of the registered app for service app>/.default
到scopes
.
推荐阅读
- java - 当双引号出现在键/值中时 JSON 被破坏
- android - 如何从 onMessageArrived 检索 payloadString 到构造函数?
- angular - 在外部 url 上调用组件而不更改该 url
- apache-kafka - 用于事件发布的 Kafka 与 JMS
- java - BaseEvents 子类的 Checkstyle
- amazon-dynamodb - 如何在 AWS DynamoDB 中查找多个项目
- c# - 将 ViewModel 传递给 Web API 控制器
- php - 如何在 laravel 分页收集结果中添加自定义(新)列
- hadoop - 运营大数据和分析大数据之间的混淆以及 Hadoop 在哪个类别上运行?
- azure-active-directory - 未返回预期更改的组的图形增量查询