验证访问令牌 - Asp.Net 身份
Verify Access Token - Asp.Net Identity
我正在使用 ASP.Net Identity 来实现外部登录。用户使用 Google 登录后,我得到 google 的外部访问令牌。然后,我再次 api 调用 ObtainLocalAccessToken(),用外部访问令牌换取新的本地访问令牌。
ObtainLocalAccessToken()
调用 VerifyExternalAccessToken(),后者通过手动进行 http 调用并解析 user_id.
来验证提供商的外部访问令牌
如何利用 ASP.NET 身份删除整个方法 VerifyExternalAccessToken()
?
我相信这就是 [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
的目的,不是吗?我想用该属性装饰 ObtainLocalAccessToken()
端点并在 header ({'Authorization' : 'Bearer xxx' }
) 中发送 external_access_token,它应该填充 User.Identity
而无需手动验证外部访问令牌?我相信这就是目的,但我无法让它发挥作用。我从 google 发送了一个有效的外部访问令牌,但它被 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 身份验证质询。
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');
它使用 VerifyExternalAccessToken 对 Google 和 执行反向查找Facebook 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;
}
如果找到令牌,它 returns 一个新的 ASP.NET 不记名令牌
var accessTokenResponse = GenerateLocalAccessTokenResponse(user.UserName);
return Ok(accessTokenResponse);
使用 [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
OWIN 中间件 使用 外部承载令牌 来访问第 3 方的 Cookie 并注册一个新帐户(或查找现有帐户)。
OWIN 中间件 无法配置为接受 外部承载令牌 而不是本地授权令牌。 外部不记名令牌 仅用于身份验证和注册。
我正在使用 ASP.Net Identity 来实现外部登录。用户使用 Google 登录后,我得到 google 的外部访问令牌。然后,我再次 api 调用 ObtainLocalAccessToken(),用外部访问令牌换取新的本地访问令牌。
ObtainLocalAccessToken()
调用 VerifyExternalAccessToken(),后者通过手动进行 http 调用并解析 user_id.
如何利用 ASP.NET 身份删除整个方法 VerifyExternalAccessToken()
?
我相信这就是 [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
的目的,不是吗?我想用该属性装饰 ObtainLocalAccessToken()
端点并在 header ({'Authorization' : 'Bearer xxx' }
) 中发送 external_access_token,它应该填充 User.Identity
而无需手动验证外部访问令牌?我相信这就是目的,但我无法让它发挥作用。我从 google 发送了一个有效的外部访问令牌,但它被 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 身份验证质询。
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');
它使用 VerifyExternalAccessToken 对 Google 和 执行反向查找Facebook 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;
}
如果找到令牌,它 returns 一个新的 ASP.NET 不记名令牌
var accessTokenResponse = GenerateLocalAccessTokenResponse(user.UserName);
return Ok(accessTokenResponse);
使用 [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
OWIN 中间件 使用 外部承载令牌 来访问第 3 方的 Cookie 并注册一个新帐户(或查找现有帐户)。
OWIN 中间件 无法配置为接受 外部承载令牌 而不是本地授权令牌。 外部不记名令牌 仅用于身份验证和注册。