【问题标题】:OAuth 2.0 and its specificationsOAuth 2.0 及其规范
【发布时间】:2014-07-29 13:31:48
【问题描述】:
我正在尝试了解 OAuth 协议的工作方式。我在The OAuth 2.0 Authorization Framework 上阅读了它的规范,我对这里的不同概念感到困惑!
1-什么是client_ID?它应该是客户端每次发送到授权服务器的唯一字符串吗?那是可选的吗? client_secret 怎么样?
2- 访问令牌是每个用户的唯一字符串,还是类似于会话标识符,它是每个会话特定的随机字符串?
我也有关于隐式授权的问题!
1-我们什么时候想使用这种类型的授权?
2-客户端将如何获得访问令牌?我读过用户代理应该使用网络托管客户端资源发送的脚本来解析片段!但我不明白这个过程!网络托管的客户端资源到底是什么?
作为我的最后一个问题!
- Web 应用程序是否可以使用 OAuth 协议但更改参数名称?例如,我可以在我的协议实现中使用 OAuth_ID 而不是 Client_ID,还是必须遵循现有参数的确切名称?
提前致谢。
【问题讨论】:
标签:
web-applications
login
oauth-2.0
authorization
access-token
【解决方案1】:
客户端 ID (client_id) 是由授权服务器生成并分配给您的客户端应用程序的唯一 ID。客户端 ID 的格式由每个授权服务器确定,这是一个实现问题。它可以是字符串或数字。每次都需要将客户端 ID 发送到端点(授权端点和令牌端点)。 'client_id' 是必须参数。
当客户端应用程序访问令牌端点时,在某些情况下需要客户端密钥 (client_secret)。阅读 2.3。和 3.2.1。请仔细阅读 RFC 6749。
访问令牌是一个字符串或一个数字,它代表以下授权信息:谁(用户)已向哪个客户端应用程序授予了哪些权限(范围)。它可能是随机字符串/数字或加密字符串。在前一种情况下,授权服务器的实现有一个随机字符串/数字与授权信息之间的映射表。在后一种情况下,访问令牌是包含授权信息的加密字符串。
隐式授予是获取访问令牌的一步流程。例如,JavaScript 应用程序(Web 托管的客户端)更喜欢隐式授予而不是授权代码授予。在隐式授权中,授权服务器返回“302 Found”和 Location 标头,其值包含重定向 URI 和访问令牌。要提取访问令牌,请解析 Location 标头的值或实现一个回调函数,该回调函数由您正在使用的 Web 浏览器组件(例如 WebView)在位置更改时调用。
您不能使用“OAuth_ID”作为参数名称。必须使用准确的名称“client_id”。