如何发送带有“grant_type=client_credentials”的HTTP头部?

5

我正在尝试在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是一个参数请求还是一个请求体(我应该将其作为请求体发送还是作为参数发送)

非常感谢您提前的帮助!


这些问题需要针对你正在使用API的公司。 - zerohero
2个回答

5

首先,从您提供的请求代码开始:

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

grant_type=client_credentials&scope=write

我觉得这个“请求(request)”是为了获取客户端(app)访问令牌(使用OAuth Client Credentials Grant),而不是注册用户的“请求(request)”。因此,我根据这个假设回答下面的问题。

问题1:授权码是静态的吗?每次请求新用户时必须相同,还是应该每次生成一个新的base46代码?

OAuth Client Credentials Grant的情况下,Authorization头包含客户端身份验证信息(例如,client_idclient_secret)。通常情况下,您通过向API提供者注册客户端(应用程序)来获得这些信息。 所以答案是,是的,只要信息(client_id/secret)不改变/过期,它应该是静态的。

问题2:grant_type是参数请求还是body(我应该将其作为body或参数发送)

OAuth规范规定,grant_type参数应写在HTTP请求实体中,因此应该在请求正文中发送。但是,某些实现也允许在URL中传递grant_type参数。

3

问题1:通常情况下,您应该使用公共令牌(在这种情况下是基本的oauth令牌),当此令牌过期时,您应该更新它。在您的api文档中,应存在令牌过期时间并执行令牌刷新。

问题2:根据您的信息“grant_type = client_credentials& scope = write”,这是一个body param请求(是带有body的post请求)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接