问题
Openididct v4开始拒绝PKCE的访问令牌请求(RFC 7636,当客户端交换授权代码时),如果客户端通过scopes
(参考强制执行它的代码中的行)。v3.x的情况并非如此
然而,MSAL.js实现有他们所谓的“* 混合流 *”(docs),它混合了隐式授权和授权代码流,并且在交换授权代码时发送scopes
。😟
示例
来自MSAL.js的请求:
curl --location 'https://localhost:5003/connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded;charset=utf-8' \
--data 'client_id=XXX&redirect_uri=https%3A%2F%2Flocalhost:5003&scope=openid%20profile&code={THE_CODE}&x-client-SKU=msal.js.browser&x-client-VER=2.21.0&x-client-OS=&x-client-CPU=&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=5|865,0,,,|,&x-client-last-telemetry=5|0|865,33365111-6e2e-4707-946c-e93b095f6c1e|invalid_request|1,0&code_verifier=jJdT8dsU&grant_type=authorization_code&client_info=1&client-request-id=99933333-cdd4-4991-8dcb-1a28f3a0669d'
来自Openiddict的回复:
{
"error": "invalid_request",
"error_description": "The 'scope' parameter is not valid in this context.",
"error_uri": "https://documentation.openiddict.com/errors/ID2074"
}
问题
有什么办法能让这张支票放松下来吗?
IMHO,Openiddict拒绝,在这种情况下,是过于僵硬的行为,警告就足够了。
1条答案
按热度按时间0g0grzrc1#
交换授权码时对
scopes
的有争议的检查是在OpenIdDict v4(link to the commit)中添加的。从代码中可以看到:EventHandler
构建的,这使得它很容易从管道中添加/删除(是的,它是在Exchange.DefaultHandlers
中添加的,所以它默认为ON)。因此,通过将这一行添加到
AddServer()
来删除处理程序是安全的:下面是一个在DI容器中注册OpenIddict令牌服务器服务的示例(请参阅my GitHub example中的更多内容):