Google OAuth2 Java API如何在回调/重定向URI中设置state参数
错误原因
你之前的写法错误原因是将state参数作为查询参数附加到了redirect_uri中,不符合Google OAuth2的校验规则:
redirect_uri必须和你在Google Cloud后台配置的回调地址完全一致,不能额外添加预留的OAuth参数state是授权请求的独立顶层参数,不属于redirect_uri的组成部分,因此Google会返回对应的400错误。
正确实现方案
无需修改getRedirectUri方法,保持原有返回纯回调地址的逻辑即可,额外覆写AbstractAuthorizationCodeServlet的newAuthorizationCodeRequestUrl方法,在该方法中设置state参数:
@Override protected AuthorizationCodeRequestUrl newAuthorizationCodeRequestUrl( HttpServletRequest req, HttpServletResponse resp, String redirectUri) throws ServletException, IOException { // 调用父类方法获取基础授权请求URL对象 AuthorizationCodeRequestUrl url = super.newAuthorizationCodeRequestUrl(req, resp, redirectUri); // 在此处设置自定义的state参数值 url.setState("myspecialname"); return url; }
该方法生成的是发往Google的授权请求的基础URL,在此处设置的state会作为顶层参数追加到授权请求URL中,和官方给出的示例格式完全匹配,即可正常通过校验,回调时state参数也会正常回传给你的服务端。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

