AppModelV2:如何请求额外的用户配置文件数据(电子邮件地址,...)
AppModelV2: how to request additional user profile data (email address, ...)
我正在尝试使用 OpenIdConnect 进行统一应用身份验证的新模型。
我按照 https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-devquickstarts-dotnet-web/ (sample code at https://github.com/AzureADQuickStarts/AppModelv2-WebApp-OpenIdConnect-DotNet 中的说明进行了操作。
我已设置好所有内容并且可以登录(使用 Azure AD 凭据或 Microsoft 帐户)。默认情况下,我得到(除了所需的 openid 声明,如 ver
、iss
、aud
、exp
等),以下一组 'useful'(对应用程序开发人员有用)声明:
name
preferred_username
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
http://schemas.microsoft.com/identity/claims/tenantid
示例使用 OpenID Connect 并仅请求 "openid" 作为范围值(参见 https://github.com/AzureADQuickStarts/AppModelv2-WebApp-OpenIDConnect-DotNet/blob/complete/WebApp-OpenIDConnect-DotNet/App_Start/Startup.Auth.cs 处的配置代码):
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// (other properties omitted for brevity)
Scope = "openid"
});
OpenID Connect 规范 (http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims) 定义了 profile
和 email
等值来请求额外声明;但是,当我添加这些值时,Microsoft 登录页面出现错误(AADSTS70011:输入参数 'scope' 的提供值无效。范围 openid 配置文件无效。)
如何检索这些额外的声明?具体来说,我想获取用户的电子邮件地址。
v2 应用程序模型目前支持的用户信息的唯一范围是 openid。目前没有办法获取用户的电子邮件地址。我们将在未来添加此功能以及使用 v2 令牌调用图表 API 以获取有关用户的更多信息的方法。
我能够使用这个获取用户的电子邮件地址:
var claimsIdentity = (ClaimsIdentity)this.User.Identity;
var claim = claimsIdentity.FindFirst("preferred_username");
var claimValue = claim == null ? "" : claim.Value;
现在 claimValue 有了他们的电子邮件地址。这对 AAD 用户和 Microsoft 帐户用户都有效。
我正在尝试使用 OpenIdConnect 进行统一应用身份验证的新模型。
我按照 https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-devquickstarts-dotnet-web/ (sample code at https://github.com/AzureADQuickStarts/AppModelv2-WebApp-OpenIdConnect-DotNet 中的说明进行了操作。
我已设置好所有内容并且可以登录(使用 Azure AD 凭据或 Microsoft 帐户)。默认情况下,我得到(除了所需的 openid 声明,如 ver
、iss
、aud
、exp
等),以下一组 'useful'(对应用程序开发人员有用)声明:
name
preferred_username
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
http://schemas.microsoft.com/identity/claims/tenantid
示例使用 OpenID Connect 并仅请求 "openid" 作为范围值(参见 https://github.com/AzureADQuickStarts/AppModelv2-WebApp-OpenIDConnect-DotNet/blob/complete/WebApp-OpenIDConnect-DotNet/App_Start/Startup.Auth.cs 处的配置代码):
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// (other properties omitted for brevity)
Scope = "openid"
});
OpenID Connect 规范 (http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims) 定义了 profile
和 email
等值来请求额外声明;但是,当我添加这些值时,Microsoft 登录页面出现错误(AADSTS70011:输入参数 'scope' 的提供值无效。范围 openid 配置文件无效。)
如何检索这些额外的声明?具体来说,我想获取用户的电子邮件地址。
v2 应用程序模型目前支持的用户信息的唯一范围是 openid。目前没有办法获取用户的电子邮件地址。我们将在未来添加此功能以及使用 v2 令牌调用图表 API 以获取有关用户的更多信息的方法。
我能够使用这个获取用户的电子邮件地址:
var claimsIdentity = (ClaimsIdentity)this.User.Identity;
var claim = claimsIdentity.FindFirst("preferred_username");
var claimValue = claim == null ? "" : claim.Value;
现在 claimValue 有了他们的电子邮件地址。这对 AAD 用户和 Microsoft 帐户用户都有效。