Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何持久化并检索外部登录提供程序';s访问令牌_C#_Angular_Identityserver4_Openid Connect - Fatal编程技术网

C# 如何持久化并检索外部登录提供程序';s访问令牌

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(); 然后,我创建了

我对个人帐户使用.Net Core Angular模板:

dotnet新角度-au个人

我正在添加一个外部Microsoft登录提供商,因此:

services.AddAuthentication()
.AddMicrosoftAccount(配置=>{
config.ClientId=“***已编辑***”;
config.ClientSecret=“***已编辑***”;
config.SaveTokens=true;
})
.AddIdentityServerJwt();
然后,我创建了一个带有
[Authorized]
属性的页面,并尝试检索Microsoft
access\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(信息)//