validation访问令牌 – Asp.Net标识

我正在使用ASP.Net Identity来实现外部登录。 用户登录Google后,我会获得谷歌的外部访问令牌。 然后我对ObtainLocalAccessToken()进行第二次api调用,该调用将外部访问令牌换成新的本地访问令牌。

ObtainLocalAccessToken()调用VerifyExternalAccessToken() ,它通过手动进行http调用和解析user_id来validation提供者的外部访问令牌。

如何利用ASP.NET标识删除整个方法VerifyExternalAccessToken()

我相信[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]的用途是什么呢? 我想用该属性修饰ObtainLocalAccessToken()端点并在标题中发送external_access_token( {'Authorization' : 'Bearer xxx' } ),它应该填充User.Identity而无需手动validation外部访问令牌? 我相信这是目的,但我不能让它发挥作用。 我从谷歌发送一个有效的外部访问令牌,它被401拒绝。

我在Startup.Auth btw中有这一行:

  app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/Token"), Provider = new ApplicationOAuthProvider(), AuthorizeEndpointPath = new PathString("/AccountApi/ExternalLogin"), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), AllowInsecureHttp = true }); 

或者,可以使用“/ Token”端点来交换本地端口的外部访问令牌? 哪种方法是正确的?

研究Taiseer Joudeh的实施情况

/ExternalLogin端点取代OWIN身份validation挑战

当在Identity Provider中找不到外部认证用户时, AngularJS LoginController会调用authService.obtainAccessToken :

  if (fragment.haslocalaccount == 'False') { ... } else { //Obtain access token and redirect to orders var externalData = { provider: fragment.provider, externalAccessToken: fragment.external_access_token }; authService.obtainAccessToken(externalData).then(function (response) { $location.path('/orders'); 

它使用VerifyExternalAccessTokenGoogleFacebook API执行反向查找,以获取持有者令牌的声明信息。

  if (provider == "Facebook") { var appToken = "xxxxxx"; verifyTokenEndPoint = string.Format("https://graph.facebook.com/debug_token?input_token={0}&access_token={1}", accessToken, appToken); } else if (provider == "Google") { verifyTokenEndPoint = string.Format("https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={0}", accessToken); } else { return null; } 

如果找到令牌,则返回新的ASP.NET承载令牌

  var accessTokenResponse = GenerateLocalAccessTokenResponse(user.UserName); return Ok(accessTokenResponse); 

使用[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]OWIN中间件使用外部承载令牌访问第三方的Cookie并注册新帐户(或查找现有帐户)。

OWIN中间件不能配置为接受外部承载令牌而不是本地授权令牌。 外部承载令牌仅用于身份validation和注册。