似乎我在这里遗漏了一些非常基本的东西。
我创建了一个REST Api,它使用Apache Oltu OAuth2服务获取生成令牌的POST请求,如下所示:
@POST
@Consumes("application/x-www-form-urlencoded")
@Produces("application/json")
public Response authorize(@Context HttpServletRequest request) throws OAuthSystemException, IOException {
try {
OAuthTokenRequest oauthRequest = new OAuthTokenRequest(request);
OAuthIssuer oauthIssuerImpl = new OAuthIssuerImpl(new MD5Generator());
当我使用HttpRequester或Postman测试服务时,如果我输入所有身份验证和OAuth2参数作为输入参数,它的工作完全正常,例如:
https://localhost:8443/rest/OAuthService/token?grant_type=password&username=userfortest&password=Johhny1é&client_id=1234
但是我读到,对于任何POST请求,所有参数 应 为 在HTTP请求的Body中,并且从未使用url作为简单参数发送。当我尝试在HTTP请求的主体中传递它时,为了使请求安全(所以url是相同的,没有参数,并且所有参数都在正文中指定),它似乎没有收到任何东西
后,身体抛出异常OAuthTokenRequest oauthRequest = new OAuthTokenRequest(request);
带有以下消息:
{"error_description":"Missing grant_type parameter value","error":"invalid_request"}
对于要通过url传递的参数,Oltu / OAuth2的预期行为是什么?或者我做错了什么?
提前致谢。
答案 0 :(得分:2)
我完全按照他说的做了,而且效果很好。
您需要修改响应授权()参数。