C# 验证访问令牌-Asp.Net标识
我正在使用ASP.Net标识实现外部登录。用户登录谷歌后,我得到谷歌的外部访问令牌。然后,我进行第二个api调用,将外部访问令牌交换为新的本地令牌C# 验证访问令牌-Asp.Net标识,c#,oauth-2.0,asp.net-identity,asp.net-identity-2,C#,Oauth 2.0,Asp.net Identity,Asp.net Identity 2,我正在使用ASP.Net标识实现外部登录。用户登录谷歌后,我得到谷歌的外部访问令牌。然后,我进行第二个api调用,将外部访问令牌交换为新的本地令牌 ObtainLocalAccessToken()调用,该调用通过手动进行http调用并解析用户id,向提供程序验证外部访问令牌 如何利用ASP.NET标识删除整个方法VerifyExternalAccessToken()? 我相信这就是[HostAuthentication(DefaultAuthenticationTypes.ExternalBea
ObtainLocalAccessToken()
调用,该调用通过手动进行http调用并解析用户id,向提供程序验证外部访问令牌
如何利用ASP.NET标识删除整个方法VerifyExternalAccessToken()
?
我相信这就是[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
的目的,不是吗?我想用该属性修饰ObtainLocalAccessToken()
端点,并在头中发送外部访问令牌({'Authorization':'Bearer xxx'}
),它应该填充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的实施 端点将替换OWIN身份验证质询 当在身份提供程序中未找到外部身份验证用户时,AngularJS
LoginController
调用:
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');
它使用对Google和FacebookAPI执行反向查找,以获取承载令牌的索赔信息
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.ExternalBearner)]
OWIN中间件使用外部承载令牌访问第三方的Cookie并注册新帐户(或查找现有帐户)
无法将OWIN中间件配置为接受外部承载令牌而不是本地机构令牌。外部承载令牌仅用于身份验证和注册。我将在这里进行粗略猜测。但我从谷歌使用的每一项服务都是通过https。是否可能无法使用AllowInsecureHttp=true?由于您的错误是401,我很确定这意味着不允许调用http。我还不能使用ssl,所以我需要它使用http工作,就像我的web应用程序(但不是移动应用程序)中一样。但是我的理解正确吗?[HostAuthentication(DefaultAuthenticationTypes.ExternalBearner)]应该在发送外部访问令牌时填充原则?如果是,它如何知道访问令牌来自哪个提供商?除了401=未授权之外。“此请求的授权已被拒绝。”嗨,Dave,OWIN中间件中是否内置了其他解决方案或方法,或者可以调用其他方法来验证外部提供者令牌?
VerifyExternalAccessToken()
的自定义逻辑让人感觉有点刻薄/重新发明轮子,因为每次我想添加新的外部提供程序时,该方法都需要更新。例如推特。谢谢事实上,@GFoley83,VerifyExternalAccessToken()。OWIN确实有烘焙方法来食用OAuth饼干。但没有一个用于消费身份验证令牌。要获得OAuth承载令牌背后的ID,您需要由提供者决定。