Spring Email OA提供商提供Email&谷歌登录

时间:2017-06-27 12:31:01

标签: spring login oauth authorization

  

我开发了一个服务于Android应用程序的Spring服务器   用户可以通过电子邮件或Google 注册。在这种情况下注册是通过授权类型password / google执行的。

现在,我计划让我的服务器充当 OAuth2提供商,用户可以通过authorization_code授权类型连接外部客户端和手动访问令牌,允许这些客户端访问某些客户端我的服务器上的REST API端点。

基本流程是这样的:

  1. 在外部客户端上,用户使用参数

    启动对/oauth/authorize端点的调用
    • response_type:code
    • client_id:id_of_client
    • redirect_uri:uri_where_external_client_can_receive_auth_code
  2. 显示自定义设计登录页面,用户输入用户名和密码

  3. 成功登录后,会向用户显示“确认访问”页面(/oauth/confirm_access)并授予对客户的访问权限
  4. 确认后,使用可用于获取令牌的code参数调用重定向uri
  5. 外部客户端使用参数调用/oauth/token端点
    • grant_type:authorization_code
    • 代码:auth_code_that_was_previously_returned
    • client_id:id_of_client
    • redirect_uri:...
  6. 成功,访问&返回刷新令牌
  7.   

    我已经实现了这个流程,但它确实有效。

    现在我想提高一点点并增强我的自定义登录页面,用户不仅可以通过用户名和密码进行身份验证来连接外部客户端,还可以通过Google进行身份验证。

    问题是我的登录表单目前看起来像这样(custom_login.jsp):

    <html>
    <head>
    <title>Login</title>
    </head>
    <body>
            <form action="/login" method="post">
                <div class="form-group">
                    <label for="username">Username:</label> <input type="text"
                        class="form-control" id="username" name="username">
                </div>
                <div class="form-group">
                    <label for="password">Password:</label> <input type="password"
                        class="form-control" id="password" name="password">
                </div>
    
                <button type="submit" class="btn btn-success">Login</button>
    
                <input type="hidden" name="${_csrf.parameterName}"
                    value="${_csrf.token}" />
            </form>
    </body>
    </html>
    

    如您所见,提交登录表单会向我的服务器的/login端点发出POST请求,该请求不受我的控制,并重定向到/oauth/confirm_access端点。

    如果我想支持Google登录,我必须在我的custom_login.jsp中添加一个Google登录按钮,然后我几乎被卡住了。 我不知道如何使用我的服务器验证使用Google登录的用户,如/login端点使用用户名和密码,然后进一步重定向到/oauth/confirm_access端点。有谁知道怎么做?

0 个答案:

没有答案