4 web-applications azure-active-directory asp.net-core
在已连接和配置 Azure AD 的 ASP.NET Core 应用程序中。我可以使用以下代码获取 NameIdentifier:
var user = User.FindFirst(ClaimTypes.NameIdentifier).Value; ??
Run Code Online (Sandbox Code Playgroud)
当尝试使用以下代码行获取名称时:
var user = User.FindFirst(ClaimTypes.Name).Value; ?
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
你调用的对象是空的。
在 Azure Active Directory 中查找用户确实有完整的名字和姓氏。在网上试了很多例子,看起来名字应该显示出来。
更新:
终于弄明白了,起初我设法得到所有人类可读的文本,如下所示:
foreach (Claim item in User.Claims)
{
if (item.Type.Contains("name"))
{
var username = item.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
这好多了
var userName = User.FindFirst("name").Value;
Run Code Online (Sandbox Code Playgroud)
根据文件:https : //docs.microsoft.com/en-us/azure/architecture/multitenant-identity/claims:
在 ASP.NET Core 中,OpenID Connect 中间件在为用户主体填充 Claims 集合时会转换一些声明类型:
这样,如果 ID 令牌中存在 unique_name ,中间件将填充 的值ClaimTypes.Name。但根据文档:Microsoft 身份平台 ID 令牌:
unique_name :提供标识令牌主题的人类可读值。此值不能保证在租户中是唯一的,应仅用于显示目的。仅在 v1.0 中发行 id_tokens。
这样声明仅在 Azure AD V1.0 id 令牌中发出,并且不保证它在租户中是唯一的。
您可以通过以下方式获取用户名和电子邮件(profile使用 Azure AD V2.0 应用程序接收声明和测试需要范围):
var userName = User.FindFirst("name").Value;
var Email = User.FindFirst("preferred_username").Value;
Run Code Online (Sandbox Code Playgroud)
如果您想知道当前用户的名字和姓氏,您可以获取 Microsoft Graph 的访问令牌,使用令牌调用用户端点并检查响应中的givenName/surname值:
https://docs.microsoft.com/en-us/graph/api/user-get?view=graph-rest-1.0&tabs=http
| 归档时间: |
|
| 查看次数: |
3236 次 |
| 最近记录: |