【发布时间】:2015-03-23 10:12:52
【问题描述】:
我想用 Java 为我的 Web 应用程序实现 XOAuth 2.0。
我的应用程序要求用户提供用户名和密码。现在使用这些凭据,我想通过 Gmail 对用户进行身份验证。
请建议库,以及如何实现它? 我是使用 Gmail 进行身份验证的新手。需要一些建议。
【问题讨论】:
我想用 Java 为我的 Web 应用程序实现 XOAuth 2.0。
我的应用程序要求用户提供用户名和密码。现在使用这些凭据,我想通过 Gmail 对用户进行身份验证。
请建议库,以及如何实现它? 我是使用 Gmail 进行身份验证的新手。需要一些建议。
【问题讨论】:
据我所知,OAuth 2.0 的目的是防止用户的凭据泄露到第三方应用程序中。
abstract flow shows 客户端(第三方应用程序)应如何使用access_token(使用其中一种授权类型检索)来访问资源。
规范还定义了要使用的基本 HTTPS 调用,例如在 authorization code grant type 的情况下使用(我认为这个流程最适合您)。这有 2 个请求,一个用于 code(用户代理重定向用于将代码发送到第 3 方应用程序),另一个用于 access_token。
授权码请求&响应
GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz
令牌请求&响应:
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
因此您无需向用户询问 GMail 凭据。
Here 您可以找到符合 OAuth 2.0 的应用程序的 spring-security 示例。
希望我能帮上忙。
【讨论】: