No given name or surname claim when using Azure Active Directory OAuth
我们正在使用Azure Active Directory对MVC应用程序进行身份验证,但在ClaimsPrincipal中返回的唯一信息是名称和组成员身份。
我们还需要访问具有给定名称和姓氏的用户。关于如何解决此问题的任何指示?
- 嗨,Shane,您在解决这个问题上有什么进展吗?我现在正在尝试此操作,也不会收到这些(给定名称和姓氏)声明。
OpenID Connect引入了一个id_token(这是一个JWT)。
查看文档,id_token包含一些可能匹配的声明:
-
named_name:提供在Azure AD用户对象上设置的用户的名字或"给定"名称。
-
family_name:提供在Azure AD用户对象中定义的用户的姓氏,姓氏或姓氏。
-
unique_name:提供易于识别的值,用于标识令牌的主题。此值不能保证在租户中唯一,并且只能用于显示目的。
因此在您的控制器中,您可以像下面那样访问这些声明:
1 2 3 4 5 6 7 8
| using System.Security.Claims;
...
var identity = (ClaimsIdentity)User.Identity;
var lastName = identity.Claims.First(
c => c.Type =="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname").Value;
var firstName = identity.Claims.First(
c => c.Type =="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname").Value;
var displayName = identity.Claims.First(c => c.Type =="name").Value; |
这些声明对应于您的Azure AD中的名字,姓氏和显示名称:
- 那就是问题所在。我们完全看不到这些声明,并且基于我们使用的是OpenID v2.0的文档。我们还让基础架构验证了这些详细信息是否在Azure AD中。就是说,我们所看到的是在本地计算机上,当我考虑它时,由于ReplyURL错误,我不确定身份验证工作在其中如何工作。虐待看一下并更新问题。
-
当然,当您创建新项目时,我将VS 2015中的默认模板与Azure AD身份验证配合使用。
-
@ShaneCourtrille您在解决这个问题上有什么进展吗?我现在正在尝试此方法,也不会获得这些(给定名称和姓氏)声明。
-
@MatthewBoniface,您可以检查您的天蓝色广告/身份提供者中是否存在这些声明?
-
@Thomas是的,Ive在我们的Azure B2C用户流配置中检查是否已选择了这些应用程序声明-但它们只是不附带令牌。无法看到B2C中可能会影响此设置的任何其他配置。
-
您可以检查退回的索赔吗? =>名称可能有所不同...可以是给定的name,family_name,unique_name或name,取决于它是oauth2还是openidconnect协议。还可以在azure门户中查看用户详细信息中填充的属性吗?
-
@Thomas感谢您的回复。因此,它似乎确实适用于我们的注册流程-所以不知道为什么它不适用于登录流程。但是您说对了,但声明类型与我期望的不同,使用" schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"和" schemas.xmlsoap.org/ws/2005/05"是正确的/ identity / claims / surname"。这将立即执行,但仍要弄清为什么它不适用于登录流程。
-
您检查id_token /和/或access_token吗?
-
我有一个类似的问题。我必须在ID令牌中添加对名字和姓氏的可选声明,因为这是我使用的唯一令牌。然后,用户必须注销并重新登录才能将信息添加到ID令牌中。