0

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

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

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

    });

当我运行应用程序时,一切正常,并且在用户输入他的用户名和密码后,会出现一条确认消息,授予我的应用程序访问电子邮件地址的权限,但是当我检查自定义ProfileService使用中检索到的声明时context.Subject.Claims,我没有找到任何索赔包含电子邮件地址,所以任何帮助我怎样才能得到它。

这是一个代码示例,显示了我如何访问 GetProfileDataAsync 方法中的声明:

    public async Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        

        var claims = context.Subject.Claims;   // => there is no claim for the email address          

        claims = claims.Where(claim => context.RequestedClaimTypes.Contains(claim.Type)).ToList();
        context.IssuedClaims = claims.ToList();
    }

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

示例代码包含 3 个项目

  • Fiver.Security.AuthServer(身份服务器)
  • Fiver.Security.AuthServer.Client(客户端)
  • Fiver.Security.AuthServer.Api(客户端想要访问的安全 API)

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

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

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

4

0 回答 0