AppModelV2:如何请求其他用户个人资料数据(电子邮件地址,...)

时间:2015-09-11 14:36:08

标签: azure-active-directory adal

我正在尝试使用OpenIdConnect进行统一应用身份验证的新模型。

我按照https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-devquickstarts-dotnet-web/上的说明操作(示例代码https://github.com/AzureADQuickStarts/AppModelv2-WebApp-OpenIdConnect-DotNet)。

我已完成所有设置,我可以登录(使用Azure AD凭据或Microsoft帐户)。默认情况下,我得到(除了verissaudexp等所需的openid声明),以下一组“有用”(如对应用程序开发人员有用的声明:

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)定义profileemail等值,以请求其他声明;但是当我添加这些值时,Microsoft登录页面会出错(AADSTS70011:输入参数'scope'的提供值无效。范围openid配置文件无效。)

如何检索这些额外的声明?具体来说,我想获得用户的电子邮件地址。

2 个答案:

答案 0 :(得分:1)

v2 app模型今天支持用户信息的唯一范围是openid。目前,还没有办法获取用户的电子邮件地址。我们将在未来添加此内容,以及使用v2令牌调用Graph API以获取有关用户的更多信息的方法。

答案 1 :(得分:0)

我可以使用此功能获取用户的电子邮件地址:

var claimsIdentity = (ClaimsIdentity)this.User.Identity;
var claim = claimsIdentity.FindFirst("preferred_username");
var claimValue = claim == null ? "" : claim.Value;

现在claimValue有他们的电子邮件地址。这对我和AAD用户以及Microsoft帐户用户都有用。