我正在尝试使用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个项目
我从这篇文章中获取了原始代码
https://www.codeproject.com/Articles/1205745/Identity-Server-with-ASP-NET-Core
正如我上面所说,问题是我将电子邮件添加为范围,但在登录后它不会作为Microsoft帐户的声明返回..