【发布时间】:2015-05-14 20:44:47
【问题描述】:
我想开发两个独立的服务,一个用于业务的东西,一个用于使用 Spring OAuth 2 的用户身份验证
我们称它们为 Business-Service 和 OAuth-Service。
现在,如果请求未通过身份验证,我希望将业务服务委托给 OAuth 服务。客户端应用程序(Android 应用程序)不应该先验地知道 OAuth-Service,它应该只由 Business-Service 委托给它,并针对未经过身份验证的请求使用 302 HTTP 重定向。准确地说,我希望我的 API 登录页面提供一个指向 http://businessservice.com/login 的链接,当我的客户端应用决定使用此链接时,它会被重定向到 OAuth 服务。
如果我用 @EnableOAuth2Resource 注释业务服务,则当我在没有访问令牌的情况下卷曲它们时,它的所有资源都会受到保护,返回 401。到目前为止,一切都很好。如果我提供这样的访问令牌:
curl -v http://localhost:8667/resource/ -H "Authorization: Bearer $TOKEN"
我可以访问该资源。还是不错的。
但是,如果我使用 @EnableOAuth2Sso 注释业务服务以启用到 OAuth 服务的重定向,它会失去使用访问令牌访问资源的能力(与上面相同的 curl),它只会返回 302 到登录页面http://localhost:8667/login
如果我同时使用这两个注释,@EnableOAuth2Resource 似乎总是“获胜”,因为身份验证有效,但调用 http://localhost:8667/login 返回 404。
那么,创建一个资源服务器并委托给身份验证服务器进行非身份验证调用的正确方法是什么?
【问题讨论】:
标签: spring-security oauth-2.0 spring-security-oauth2 spring-cloud