首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证访问令牌- Asp.Net标识

验证访问令牌- Asp.Net标识
EN

Stack Overflow用户
提问于 2015-06-27 21:55:10
回答 1查看 7.2K关注 0票数 8

我使用ASP.Net标识来实现外部登录。在用户登录到Google之后,我得到了google的外部访问令牌。然后对ObtainLocalAccessToken()进行第二个api调用,该调用将外部访问令牌转换为新的本地令牌。

ObtainLocalAccessToken()调用VerifyExternalAccessToken(),它通过手动进行http调用和解析user_id来验证外部访问令牌。

如何利用VerifyExternalAccessToken()**?**标识来删除整个方法

我相信这就是[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]的作用,不是吗?我想用这个属性装饰ObtainLocalAccessToken()端点,并在标头({'Authorization' : 'Bearer xxx' })中发送external_access_token,它应该填充User.Identity而不需要手动验证外部访问令牌?我相信这就是目的,但我无法让它发挥作用。我从google发送了一个有效的外部访问令牌,它被401拒绝了。

我在Startup.Auth中有这一行,顺便说:

代码语言:javascript
复制
 app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/Token"),
            Provider = new ApplicationOAuthProvider(),
            AuthorizeEndpointPath = new PathString("/AccountApi/ExternalLogin"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
            AllowInsecureHttp = true
        });

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-05 21:05:48

Taiseer Joudeh的实施研究

/ExternalLogin端点取代OWIN身份验证挑战

在身份提供程序中未找到外部身份验证的用户时,AngularJS LoginController调用authService.obtainAccessToken

代码语言:javascript
复制
        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执行反向查找,以获取承载令牌的声明信息。

代码语言:javascript
复制
        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承载令牌。

代码语言:javascript
复制
        var accessTokenResponse = GenerateLocalAccessTokenResponse(user.UserName);

        return Ok(accessTokenResponse);

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31093914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档