我'm using ASP.Net Identity to implement external logins. After user logins in with Google I get google'的外部访问令牌 . 然后我对ObtainLocalAccessToken()进行第二次api调用,该调用将外部访问令牌换成新的本地访问令牌 .
ObtainLocalAccessToken()
调用VerifyExternalAccessToken(),它通过手动进行http调用和解析user_id来验证提供者的外部访问令牌 .
How can I leverage ASP.NET identity to remove the entire method VerifyExternalAccessToken()?
我相信 [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
的用途不是吗?我想用该属性修饰 ObtainLocalAccessToken()
endpoints 并在标头( {'Authorization' : 'Bearer xxx' }
)中发送external_access_token,它应该填充 User.Identity
而无需手动验证外部访问令牌?我相信这是目的,但我不能让它发挥作用 . 我从谷歌发送一个有效的外部访问令牌,它被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” endpoints 来交换本地端口的外部访问令牌?哪种方法是正确的?
1 回答
研究Taiseer Joudeh的实施情况
/ExternalLogin endpoints 替换 OWIN Authentication Challenge .
当在身份提供商中找不到外部认证用户时, AngularJS
LoginController
会调用authService.obtainAccessToken:它使用 VerifyExternalAccessToken 对 Google 和 Facebook API执行反向查找,以获取承载令牌的声明信息 .
如果找到令牌,则返回新的 ASP.NET 承载令牌
使用 [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)] , OWIN Middleware 使用外部承载令牌访问第三方的Cookie并注册新帐户(或查找现有帐户) .
OWIN Middleware 无法配置为接受外部承载令牌而不是本地权限令牌 . 外部承载令牌仅用于身份验证和注册 .