【问题标题】:how I send HTTP header with "grant_type=client_credentials"我如何使用“grant_type=client_credentials”发送 HTTP 标头
【发布时间】:2016-12-31 07:57:02
【问题描述】:
我正在尝试在 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.... 是参数请求还是正文(我应该将其与正文一起发送还是作为参数发送)
非常感谢提前!
【问题讨论】:
标签:
javascript
rest
http
https
【解决方案1】:
问题 1: 通常您应该使用公共令牌(在本例中为基本 oauth 令牌),当此令牌过期时,您应该更新它。在您的 api 文档中,应该存在使令牌过期并执行令牌刷新的时间。
问题 2:查看您的信息“grant_type=client_credentials&scope=write”,这是一个正文参数请求(是一个带有正文的发布请求)
【解决方案2】:
首先,根据您提供的请求代码:
POST /api/oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic YW75cm9pZC12tb28Jp8bGU6c2Vj
grant_type=client_credentials&scope=write
在我看来,request 是用于获取客户端(应用程序)访问令牌(使用 OAuth Client Credentials Grant),而不是 request 来注册用户。所以,我的回答是基于这个假设。
问题一:授权码是静态的,每次请求新用户时都必须相同,还是每次都生成新的base46码?
对于OAuth Client Credentials Grant,Authorization 标头包含客户端身份验证信息(例如,client_id 和client_secret)。您通常通过向 API 提供者注册您的客户端(应用程序)来获取此信息。
所以答案是,是的,只要信息(client_id/secret)不改变/过期,它就应该是静态的。
问题 2:grant_type.... 是参数请求还是正文(我应该将其与正文一起发送还是作为参数发送)
OAuth spec指定grant_type参数写在HTTP请求实体体中,所以应该在请求体中发送。但是,某些实现也允许在 url 中传递 grant_type 参数。