C# 如何持久化并检索外部登录提供程序';s访问令牌
我对个人帐户使用.Net Core Angular模板:C# 如何持久化并检索外部登录提供程序';s访问令牌,c#,angular,identityserver4,openid-connect,C#,Angular,Identityserver4,Openid Connect,我对个人帐户使用.Net Core Angular模板: dotnet新角度-au个人 我正在添加一个外部Microsoft登录提供商,因此: services.AddAuthentication() .AddMicrosoftAccount(配置=>{ config.ClientId=“***已编辑***”; config.ClientSecret=“***已编辑***”; config.SaveTokens=true; }) .AddIdentityServerJwt(); 然后,我创建了
dotnet新角度-au个人
我正在添加一个外部Microsoft登录提供商,因此:
services.AddAuthentication()
.AddMicrosoftAccount(配置=>{
config.ClientId=“***已编辑***”;
config.ClientSecret=“***已编辑***”;
config.SaveTokens=true;
})
.AddIdentityServerJwt();
然后,我创建了一个带有[Authorized]
属性的页面,并尝试检索Microsoftaccess\u令牌
,但它总是显示为null
。以下是页面的构建方式:
Test.cshtml
@page
@模型测试模型
你好
访问令牌
@Model.AccessToken
身份证
@Model.IdToken
Test.cshtml.cs
[授权]
公共类TestModel:PageModel{
私有只读用户管理器_UserManager;
公共字符串访问令牌;
公共字符串IdToken;
公共测试模型(UserManager UserManager){
_userManager=userManager;
}
公共异步任务OnGetAsync(){
如果(!User.Identity.IsAuthenticated){
返回;
}
var user=await\u userManager.GetUserAsync(用户);
AccessToken=await_userManager.GetAuthenticationTokenAsync(用户,“Microsoft”,“access_token”);
IdToken=await_userManager.GetAuthenticationTokenAsync(用户,“Microsoft”,“id_令牌”);
}
}
如前所述,我只为AccessToken
和IdToken
获取null
值-我做错了什么
另外,我还尝试了等待HttpContext.GetTokenAsync(“Microsoft”,“access_token”)——经过几天的研究,它还返回了
null
,回答了我自己的问题,最终我在和处克隆了回购协议,并通过代码跟踪目标
解决方案是在验证外部登录成功后,即在调用\u SigninManager.externalloginginasync
后,向帐户/ExternalLogin
回调处理程序(方法OnGetCallbackAsync
)添加对SigninManager.UpdateExternalLauthenticationTokensSync的调用,因此:
//如果用户已经登录,请使用此外部登录提供程序登录该用户。
var result=await _signInManager.externalLoginIgninaSync(info.LoginProvider,info.ProviderKey,isPersistent:false,bypassTwoFactor:true);
if(result.successed){
wait_signInManager.UpdateExternalAuthenticationTokensAsync(信息)//