无法使用IdentityServer4的外部身份提供程序读取用户的电子邮件地址

时间:2017-11-18 16:56:55

标签: c# identityserver4 microsoft-account

我正在尝试使用Microsoft Account作为IdentityServer4的外部登录,我根据需要在Microsoft Application门户下配置了我的应用程序,我添加了一个Web平台并在Delegated Permissions下添加了“email”以便能够阅读它,并且在这里是我访问Microsoft帐户的代码:

  .AddMicrosoftAccount("MicrosoftAccount", options =>
    {
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

        options.ClientId = "ClientId";
        options.ClientSecret = "ClientSecret";
        options.Scope.Add("openid");
        options.Scope.Add("email");

    });

当我运行应用程序时,一切正常,在用户输入用户名和密码后,会出现一条确认消息,授予我的应用程序访问电子邮件地址的权限,但当我在自定义{{1}内检查检索到的声明时使用ProfileService,我没有发现任何声明包含电子邮件地址,所以任何帮助我怎么能得到它。

以下是一个代码示例,演示了如何在GetProfileDataAsync方法中访问声明:

context.Subject.Claims

基于@ serpent5建议我写了一个示例代码来显示问题并将其上传到githug

示例代码包含3个项目

  • Fiver.Security.AuthServer(Identity Server)
  • Fiver.Security.AuthServer.Client(客户端)
  • Fiver.Security.AuthServer.Api(客户端想要访问的安全API)

我从这篇文章中获取了原始代码

https://www.codeproject.com/Articles/1205745/Identity-Server-with-ASP-NET-Core

正如我上面所说,问题是我将电子邮件添加为范围,但在登录后它不会作为Microsoft帐户的声明返回..

0 个答案:

没有答案