gpt4 book ai didi

spring - client_id 和 client_secret 通过参数与 url 发送

转载 作者:行者123 更新时间:2023-12-04 03:07:39 25 4
gpt4 key购买 nike

在尝试访问某些 protected 端点时,我的 Oauth2 服务器 (Spring) 出现了一些问题。

如果我想获得 token (通过 Zuul 网关),我会这样做:

http://localhost:4444/auth/oauth/token?client_id=gateway&client_secret=1234&grant_type=password&username=user&password=password

(假设上面的客户端和用户正确存在并且 Content-Type 为 application/x-www-form-urlencoded)。

这个调用不起作用,但是,如果我这样做:

gateway:1234@localhost:4444/auth/oauth/token?grant_type=password&username=user&password=password

然后,它起作用了。

这被认为是正常行为吗?据我所知,这应该有效。这就像当我将它们作为参数发送时没有处理 id 和 secret ,但是当我修改 url 时,它被采用并且一切正常。我需要实现一些额外的东西吗?

澄清一下,当我像在第二个 url 中一样发送 client_id 和 client_secret 时,Oauth2 服务器工作,但如果我将它们作为参数(第一个 url)发送,它就不会工作。

您可以在此处查看代码(OAuth2 服务):https://github.com/otamega93/CloudBasedUserRegistration2/tree/master/OAuth2-service

配置主要在OAuth2Configuration、WebSecurityConfig和AuthServerApplication。我正在用 postman 进行测试。当我直接访问 Oauth2 服务器时也会发生这种情况。

最佳答案

token 端点 (oauth/token) 受到保护,请参阅 TokenEndpoint :

Clients must be authenticated using a Spring Security Authentication to access this endpoint, and the client id is extracted from the authentication token. The best way to arrange this (as per the OAuth2 spec) is to use HTTP basic authentication for this endpoint with standard Spring Security support.

并查看 OAuth 2 Developers Guide :

The token endpoint is protected for you by default by Spring OAuth in the @Configuration support using HTTP Basic authentication of the client secret. This is not the case in XML (so it should be protected explicitly).

客户端必须使用基本身份验证方案对自己进行身份验证,因此客户端必须向请求添加一个Authorization header ,请参阅RFC 2617 :

To receive authorization, the client sends the userid and password,separated by a single colon (":") character, within a base64 [7]encoded string in the credentials.

 basic-credentials = base64-user-pass
base64-user-pass = <base64 [4] encoding of user-pass,
except not limited to 76 char/line>
user-pass = userid ":" password
userid = *<TEXT excluding ":">
password = *TEXT

Userids might be case sensitive.

If the user agent wishes to send the userid "Aladdin" and password"open sesame", it would use the following header field:

 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

您的第一个请求不包含 Authorization header 。

您的第二个请求包含一个带有“userinfo”子组件的 URL,请参阅 RFC 3986 :

The userinfo subcomponent may consist of a user name and, optionally,scheme-specific information about how to gain authorization to accessthe resource. The user information, if present, is followed by acommercial at-sign ("@") that delimits it from the host.

关于spring - client_id 和 client_secret 通过参数与 url 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47662358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com