首页 文章

OAUTH2.0承载令牌无法正常工作

提问于
浏览
0

我正在使用retrofit 2.0在Android上构建Bitbucket REST客户端 .

就我而言,OAUTH2.0提供“隐式授权”,当用户在提示时登录到他们的帐户时,它立即为客户端提供访问承载令牌 .

承载令牌是可用于访问受保护资源的令牌 . 拥有承载令牌的任何人都有权访问受保护资源,就像拥有承载令牌的任何其他人一样 . (根据IETF的this doc

如果我错了请纠正我,但我想使用隐式授权,用户登录他们的Bitbucket帐户后,我将获得Bearer访问令牌 . 之后,我可以使用此访问令牌访问Bitbucket上的受保护资源(如创建新的存储库) .

所以我使用了Bitbucket doc中描述的OAUTH2.0隐式授权构建了我的android . 请注意,他们描述的响应会有 #access_token={token}&token_type=bearer

这是我登录后从Bitbucket实际收到的内容:

your://redirecturi#access_token=lEuvneW39onVrnNR-jvZfirI43fwi5Wdc0YaaMROBk5YKJsd2ulXm20vJDdOBjf8I-Ne2r2vC8-_FHECSLw%3D&scopes=pipeline%3Awrite+webhook+snippet%3Awrite+wiki+issue%3Awrite+pullrequest%3Awrite+repository%3Adelete+repository%3Aadmin+project%3Awrite+team%3Awrite+account&expires_in=3600&token_type=bearer

My first question: 上述响应的Bearer访问令牌究竟是什么?

部分 lEuvneW39onVrnNR-jvZfirI43fwi5Wdc0YaaMROBk5YKJsd2ulXm20vJDdOBjf8I-Ne2r2vC8-_FHECSLw 是承载访问令牌吗?我是否必须包含"%3D"(以ASCII编码的char "=")? Bitbucket doc是不是意味着除了最后"&token_type=bear"之外的所有内容都是Bear访问令牌?

那不是全部 . Bitbucket doc提出的请求如下:

在请求标头中发送:授权:Bearer

所以我将此请求设置为根据API of Bitbucket创建一个新的存储库:

@POST("repositories/{username}/{repo_slug}")
    Call<Repository> createRepository(
            @Header("Authorization") String auth,
            @Path("username") String userName,
            @Path("repo_slug") String repoSlug);

但每次,我得到状态代码为401的响应和消息错误:

访问令牌已过期 . 使用刷新令牌获取新的访问令牌 .

当我尝试使用Restlet的DHC(像Postman这样的Chrome扩展)发布相同的请求时,会出现一个弹出窗口并要求我登录Bitbucket . 如果我拒绝这样做,我得到了同样的错误401响应 . 如果我登录,那么它的工作原理 .

My second question: 为什么我必须再次提供我的凭据?

我认为's something wrong here. I thought with the Bearer access token, I should be able to access the protected resource without having to log in before the access token'已达到过期时间 . 为什么我必须第二次输入我的凭证?这不是IETF在"Implicit grant"方法here中描述的内容 .

1 回答

  • 1

    access_token的值在 access_token= 之后开始,并在 &scopes= 之前的下一个参数 scopes 之前结束 . 片段部分的格式在https://tools.ietf.org/html/rfc6749#section-4.2.2中指定,后者指向https://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.13.4.1,其中说:

    [...]名称与值分隔=,名称/值对通过&[...]相互分隔

    因此,您按规范访问令牌值是 lEuvneW39onVrnNR-jvZfirI43fwi5Wdc0YaaMROBk5YKJsd2ulXm20vJDdOBjf8I-Ne2r2vC8-_FHECSLw%3D 但我同意结尾 %3D 是可疑的,并且可能是发件人的错误 .

    如果您的访问令牌已过期(这似乎是它),您需要再次使用隐式授权或使用刷新令牌授予来获取新访问令牌 .

相关问题