我想在休息网络服务中使用Oauth2和Spring-security。我是新手,我试图在一些网站的帮助下创建配置。尽管如此,我显然不明白oauth如何以及为休息服务验证的流程是什么。我正在使用最新的依赖项Click on the link for see my configurations。我正在使用数据库存储客户信息和令牌。当我尝试访问令牌时,使用带有帖子请求和帖子正文的follwoing网址:
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
将出现基本身份验证弹出框。我正在使用镀铬休息邮差客户端。我的数据库中有用户表,我存储,用户名和密码,当我输入username
和password
时,验证失败,如果我使用我的client_id
和{{1} } client_secret
和username
,身份验证失败。当我取消password
之后的基本身份验证时,返回:
json
我无法弄清楚会发生什么。
当我尝试使用get reqquest访问以下网址时:
{
"error": "unauthorized",
"error_description": "No client with requested id: a@a.com"
}
以下http://localhost:8080/empirecl-api/oauth/authorize?grant_type=password&username=a@a.com&password=password
将返回:
error
当我在eclipse的控制台中检查错误时,会显示以下错误:
{
"error": {
"error": "invalid_client",
"error_description": "Bad client credentials"
}
}
我如何解决这个问题以及如何将Oauth用于我的其他api。我也想用Oauth确保我所有的休息网址。
答案 0 :(得分:3)
这里有一些问题。
请参阅the oauth2 spec section on using the resource owner password grant。
client needs to authenticate和porterhead指出,您可以使用基本身份验证执行此操作。规范还允许将客户端ID和机密作为post参数传递,但更喜欢基本身份验证。
您应该确保了解更多关于OAuth2的工作原理,并且可能会扩展您的问题以解释您为什么要使用它以及您选择此特定授权类型的原因。
答案 1 :(得分:1)
您需要将客户端用户名和密码作为Base64编码的授权标头传递。
尝试使用curl。这是一个例子:
curl -v -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Basic MzUzYjMwMmM0NDU3NGY1NjUwNDU2ODdlNTM0ZTdkNmE6Mjg2OTI0Njk3ZTYxNWE2NzJhNjQ2YTQ5MzU0NTY0NmM=" \
'http://localhost:8080/empirecl-api/oauth/token?grant_type=password&username=a@a.com&password=password'
我有一个描述here
的工作示例