【发布时间】:2021-03-20 22:46:15
【问题描述】:
我正在使用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!
{
但是,我没有收到令牌内的声明。 我的想法是将此令牌发送到服务器,然后对其进行验证,如果成功在数据库中创建用户,然后使用我自己的身份验证机制用于其他用户(不是域的一部分,完全独立的用户)。 但我不希望域中的所有用户都可以访问这个应用程序。 所以我想得到要求,角色......
如何获得声明,使用这个或任何其他给定用户电子邮件的库,或其他一些独特的数据?
【问题讨论】:
-
您好,请问您获得访问令牌后要请求哪个api?请求受 AD 保护的 Web 应用程序 api 或请求图形 api。看来您已将 microsoft graph 权限(
"User.Read", "User.ReadBasic.All")添加到scopes -
我只想请求一种匿名非保护方法来使用“我的”现有身份验证方法登录用户?为什么,因为我已经拥有它并且它需要数据库中的用户。所以,我的想法是在数据库中插入用户,如果它具有良好的 AD 角色并从该用户生成 jwt 令牌,我已经有基础架构代码
-
我不太清楚你的描述。据我了解,您的要求是在访问令牌中检查声明
roles,但您找不到声明roles,对吧? -
是的。我想从那个 API 中获取角色。然后我会知道用户是否有权访问我的应用程序
-
如果您在访问令牌中找不到声明
roles,可能是因为您在scopes中添加了microsoft graph 权限("User.Read", "User.ReadBasic.All")。
标签: c# azure azure-active-directory msal microsoft-identity-platform