Exception Oauth2和Spring安全性:使用Oauth2和Spring安全性进行身份验证时失败

Exception Oauth2和Spring安全性:使用Oauth2和Spring安全性进行身份验证时失败,exception,spring-security,oauth-2.0,basic-authentication,Exception,Spring Security,Oauth 2.0,Basic Authentication,我想在RESTWeb服务中使用Oauth2和Spring安全性。我是这方面的新手,我正试图在一些网站的帮助下创建配置。尽管如此,我仍然不清楚oauth的rest身份验证服务的流程是怎样的。我正在使用最新的依赖项。我使用数据库存储客户信息和令牌。当我尝试访问令牌时,使用以下url和post请求和post正文: http://localhost:8080/empirecl-api/oauth/token grant_type=password&username=a@a.com&pas

我想在RESTWeb服务中使用Oauth2和Spring安全性。我是这方面的新手,我正试图在一些网站的帮助下创建配置。尽管如此,我仍然不清楚oauth的rest身份验证服务的流程是怎样的。我正在使用最新的依赖项。我使用数据库存储客户信息和令牌。当我尝试访问令牌时,使用以下url和post请求和post正文:

http://localhost:8080/empirecl-api/oauth/token
grant_type=password&username=a@a.com&password=password&client_id=my-client-with-secret&client_secret=ak_secret
将出现“基本身份验证”弹出框。我正在使用chrome rest postman客户端。我的数据库中有一个用户表,存储用户名和密码,当我输入这些
username
password
时,身份验证失败,如果我使用我的
client\u id
client\u secret
作为
username
password
,身份验证失败。当我取消基本身份验证的pop时,返回以下
json

{
"error": "unauthorized",
"error_description": "No client with requested id: a@a.com"
}
我不知道会发生什么事

当我尝试使用get-reqquest访问以下url时:

http://localhost:8080/empirecl-api/oauth/authorize?grant_type=password&username=a@a.com&password=password
将返回以下
错误

{
"error": {
    "error": "invalid_client",
    "error_description": "Bad client credentials"
}
}
当我在eclipse的console中检查错误时,显示以下错误:

AuthorizationEndpoint:436 - Handling ClientRegistrationException error: No client with requested id: null

如何解决这个问题以及如何将Oauth与RESTAPI一起使用。我还想用Oauth保护我的所有rest url

您需要将客户端用户名和密码作为Base64编码的授权头传递

尝试使用curl。以下是一个例子:


卷曲-v-X贴子\
-H“内容类型:应用程序/json”\
-H“授权:基本MZUZYJMWMMM0NDU3NGY1NJUNDU2ODDLNTM0ZTDKNME6MJG2OTI0NJK3ZTYXNWE2NZJHNJQ2YTQ5MZU0NTY0NMM=“\
'http://localhost:8080/empirecl-api/oauth/token?授权类型=密码和用户名=a@a.com&密码=密码'


我介绍了一个工作示例

您需要将客户端用户名和密码作为Base64编码的授权标头传递

尝试使用curl。以下是一个例子:


卷曲-v-X贴子\
-H“内容类型:应用程序/json”\
-H“授权:基本MZUZYJMWMMM0NDU3NGY1NJUNDU2ODDLNTM0ZTDKNME6MJG2OTI0NJK3ZTYXNWE2NZJHNJQ2YTQ5MZU0NTY0NMM=“\
'http://localhost:8080/empirecl-api/oauth/token?授权类型=密码和用户名=a@a.com&密码=密码'


我描述了一个工作示例

这里有两个错误

  • 您使用了错误的端点-请求应该指向令牌端点,而不是授权端点
  • 它应该是一个POST请求-您不应该在URL中传递参数
  • 当用户必须进行身份验证时,以及当客户端进行身份验证时,您会感到困惑-服务器正在从客户端查找基本凭据,但您输入的是用户名
  • 而且,正如porterhead指出的,您可以使用基本身份验证来实现这一点。该规范还允许将客户端id和secret作为post参数传递,但更喜欢基本身份验证


    您可能应该确保对OAuth2的工作原理有更多的了解,并可能扩展您的问题,以解释为什么要使用它以及为什么选择这种特殊的授权类型。

    这里有一些错误

  • 您使用了错误的端点-请求应该指向令牌端点,而不是授权端点
  • 它应该是一个POST请求-您不应该在URL中传递参数
  • 当用户必须进行身份验证时,以及当客户端进行身份验证时,您会感到困惑-服务器正在从客户端查找基本凭据,但您输入的是用户名
  • 而且,正如porterhead指出的,您可以使用基本身份验证来实现这一点。该规范还允许将客户端id和secret作为post参数传递,但更喜欢基本身份验证


    您可能应该确保对OAuth2的工作原理有更多的了解,也许可以扩展您的问题,解释为什么要使用它以及为什么选择这种特殊的补助金类型。

    hello,@porterhead,@Basic mZuzyjmmmM0ndu3ngy1njuwndu2odlntm0ztdknme6mjg2oti0njk3ztyxnwe2nzjhq5mzun0nmm的实际值是多少=“`?String-toEncode=clientId+”:“+clientSecret-String-encodestr=Base64.encodeToString(toEncode.bytes())@lain-Porter我正在使用客户机的密码:123456789客户机信息并将其编码为Base64,但发送请求时仍然存在问题。您好,@porterhead`Basic MZUZYJMMM0NDU3NGY1NJUWNDU2ODDLNTM0ZTDKNME6MJG2OTI0NJK3ZTYXNWE2NZJHNJQ2YTQ5MZU0NY0NMM=“`?字符串toEncode=clientId+”:“+clientSecret字符串encodedStr=Base64.encodeToString(toEncode.bytes())@lain Porter我正在使用
    我的客户机和secret:123456789
    客户机信息,并将其编码为base64,但发送请求仍然存在问题。Hello@Luke我能够生成令牌,但仍然存在保护我需要保护的资源的问题。从rest客户机,对资源的调用成功进行,没有任何authentication.following是config:
    Hello@Luke我能够生成令牌,但仍然存在保护我需要保护的资源的问题。从rest客户端,对资源的调用在没有任何身份验证的情况下成功进行。以下是config: