gpt4 book ai didi

c# - 验证访问 token - Asp.Net 身份

转载 作者:太空狗 更新时间:2023-10-29 19:40:52 29 4
gpt4 key购买 nike

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

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

我如何利用 ASP.NET 身份删除整个方法 VerifyExternalAccessToken()

我相信这就是 [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)] 的用途,不是吗?我想用该属性装饰 ObtainLocalAccessToken() 端点并在 header 中发送 external_access_token ({'Authorization' : 'Bearer xxx' }),它应该填充 User.Identity 无需手动验证外部访问 token ?我相信这就是目的,但我无法让它发挥作用。我从谷歌发送了一个有效的外部访问 token ,但它被 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”端点将外部访问 token 换成本地访问 token 吗?哪种方法是正确的?

最佳答案

学习Taiseer Joudeh的实现

/ExternalLogin endpoint 替换了 OWIN Authentication Challenge

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 GoogleFacebook API 执行反向查找以获取不记名 token 的声明信息。

        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;
}

如果找到 token ,它会返回一个新的 ASP.NET 不记名 token

        var accessTokenResponse = GenerateLocalAccessTokenResponse(user.UserName);

return Ok(accessTokenResponse);

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

OWIN 中间件 无法配置为接受外部不记名 token 而不是本地授权 token 。 外部承载 token 仅用于身份验证和注册。

关于c# - 验证访问 token - Asp.Net 身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31093914/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com