我如何使用“grant_type = client_credentials”

时间:2016-08-24 09:05:30

标签: javascript rest http https

我正在尝试在REST API上注册新用户,请求应该是这样的:

POST /api/oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic YW75cm9pZC12tb28Jp8bGU6c2Vj

grant_type=client_credentials&scope=write

问题1:授权代码是静态的,每次我请求新用户时都必须相同,或者我每次都要生成一个新的base46代码?

问题2:grant_type ....是参数请求或正文(我应该将其与正文一起发送或作为参数发送)

非常感谢提前!

2 个答案:

答案 0 :(得分:1)

问题1:通常您应该使用公共令牌(在本例中为Basic oauth令牌),当此令牌过期时,您应该续订它。在api的文档中,应该存在使令牌到期并执行令牌刷新的时间。

问题2:查看您的信息" grant_type = client_credentials& scope = write"它是一个身体参数请求(是一个带有正文的帖子请求)

答案 1 :(得分:1)

首先,来自您提供的请求代码:

POST /api/oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic YW75cm9pZC12tb28Jp8bGU6c2Vj

grant_type=client_credentials&scope=write

在我看来,请求用于获取客户端(app)访问令牌(使用OAuth Client Credentials Grant),而不是请求来签署 - 一个用户。所以,我的答案基于这个假设。

  

问题1 :授权代码是静态的,每次我请求新用户时都必须相同,或者我每次都要生成一个新的base46代码?

对于OAuth Client Credentials GrantAuthorization标头包含客户端身份验证信息(例如client_idclient_secret)。您通常通过向API提供商注册您的客户端(应用程序)来获取此信息。 所以答案是,是的,只要信息(client_id / secret)没有改变/到期,它就应该是静态的。

  

问题2 :grant_type ....是参数请求或正文(我应该将其与正文一起发送或作为参数发送)

OAuth spec 指定 grant_type参数写在HTTP请求实体中,因此在请求正文中发送。但是,某些实现也允许在url中传递grant_type参数。