我试图了解如何正确识别由哪个提供商发起的返回授权请求。我看到三种方法:
redirect_uri
回调URI。 /oauth2/<provider-name>/callback
等。state
参数中编码提供商ID /名称我已经阅读了OAuth2规范的部分内容,但我找不到任何讨论它的内容。看看其他客户端实现,似乎提供者特定的URI是最常见的解决方案。我错过了什么吗?
答案 0 :(得分:2)
客户端可能不是多租户,并且与单个授权服务器紧密集成,因此不需要存储提供程序标识符,因为只有一个固定的标识符。这可能是没有明显解决方案的原因。
像你这样的多提供商客户应该将提供商标识符存储为state
的一部分。这是因为state
应受到保护,而特定于提供商的redirect_uri
则不受保护。可以针对提供者B的回调为提供者A播放访问令牌,从而破坏提供者特定回调的目的。
state
可以通过引用服务器状态或加密cookie来保护,也可以通过状态参数的自包含加密结构化值的形式保护,因此可以是一种安全的机制。存储提供标识符。