Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ResourceOwnerPasswordResourceDetails-传递clientid和secret以生成oauth2令牌_Java_Spring_Spring Boot_Spring Security_Oauth 2.0 - Fatal编程技术网

Java ResourceOwnerPasswordResourceDetails-传递clientid和secret以生成oauth2令牌

Java ResourceOwnerPasswordResourceDetails-传递clientid和secret以生成oauth2令牌,java,spring,spring-boot,spring-security,oauth-2.0,Java,Spring,Spring Boot,Spring Security,Oauth 2.0,我按照本文中提到的已接受答案生成OAuth2令牌。然而,我得到了HTTP 401响应。调试时,我看到clientid和clientsecret没有作为HTTP请求中表单的一部分传递。我只看到下面列出的值被传递。为了传递clientid和clientsecret我还需要做些什么吗 {grant_type=[password], username=[username], password=[password]} 默认情况下,您的客户端使用HTTP基本身份验证方案,但您的服务器需要“表单”身份验证方

我按照本文中提到的已接受答案生成OAuth2令牌。然而,我得到了HTTP 401响应。调试时,我看到
clientid
clientsecret
没有作为HTTP请求中表单的一部分传递。我只看到下面列出的值被传递。为了传递
clientid
clientsecret
我还需要做些什么吗

{grant_type=[password], username=[username], password=[password]}

默认情况下,您的客户端使用HTTP基本身份验证方案,但您的服务器需要“表单”身份验证方案

您的服务器与OAuth 2不兼容,请参阅:

2.3.1。客户端密码

拥有客户端密码的客户端可以使用HTTP Basic [RFC2617]中定义的用于验证的验证方案 授权服务器。客户端标识符使用 “application/x-www-form-urlencoded”编码算法 附录B,编码值用作用户名;客户 密码使用相同的算法进行编码,并用作 密码。授权服务器必须支持HTTP Basic 用于验证已颁发证书的客户端的身份验证方案 客户端密码

但您可以将客户端的身份验证方案更改为“form”,请参见:

clientAuthenticationScheme:
客户端用于对访问令牌端点进行身份验证的方案。建议值:“http_basic”和“form”。默认值:“http_basic”。参见OAuth 2规范第2.1节


@dur在标题中我看到[Authorization=[Basic Y3RwX2lkOmN0cF9zZWNyZXQ=]]当我使用rest客户端运行它时,我将所有这些作为表单正文的一部分传递。@dur授权服务器由我无权访问的第三方应用程序管理。客户端id和密码与您提到的相同。我怀疑的另一件事是内容类型。当使用外部rest客户端运行时,我提供的内容类型为“application/x-www-form-urlencoded”。然而,我并没有在程序中明确地设置它。我必须这样做吗?现在可以了:)必须设置resource.setClientAuthenticationScheme(AuthenticationScheme.form);谢谢你的解释。在我的例子中,最初我将客户端身份验证方案设置为AuthenticationScheme.header,得到的\u client\u id无效。一旦我将其更改为AuthenticationScheme.query,效果良好。