具有自定义身份验证的OAuth2 Provider

时间:2017-03-27 10:11:40

标签: spring authentication oauth oauth-2.0

我正在尝试实施OAuth2 Provider,它使用自定义登录对用户进行身份验证。 为了理解,我查看了Spring Boot OAuth2 Tutorial。 我不太了解,如何实现我自己的身份验证机制,以便从我的服务器使用OAuth2 SSO。

我想添加自定义身份验证机制(例如“用户必须回答身份验证问题”或“用户必须输入身份验证和点击按钮进行身份验证”),而不是Facebook和Github示例。

我读到了关于实现我自己的AuthenticationProvider的信息,但是如果我把所有的拼图部分组合在一起我就陷入了困境。

1 个答案:

答案 0 :(得分:0)

让我们一步一步走。 OAuth只是authz提供商,所以不要谈论身份验证。现在特别针对您的用例,如果您希望对用户进行身份验证,那么基于OAuth authz代码的流程是有意义的(您甚至可以选择隐式流程,请查看rfc 6749)。现在,这将如何为您服务。为了简单起见,我正在接受隐式流程,Authz流程只是它的扩展,终端客户端获取临时代码,稍后它与Identity Server交换以获取访问令牌。以下是步骤:

  1. 客户端应用程序根据rfc 6749使用数据命中/授权uri

  2. 验证提交的数据后,服务器会将用户转发到“登录”页面(或其他用于身份验证的页面)。身份验证后,cookie将在浏览器中设置,或者数据存储在服务器中以将用户标记为已通过身份验证。

  3. 身份验证服务器将用户重定向到用户同意页面(您甚至可以根据需要跳过此选项,但OAuth 2规范包含此内容),其中user指定允许所有权限(范围),此处用户可以允许或允许拒绝。
  4. 如果用户允许,则将这些权限提交给服务器,然后服务器存储数据并使用#fragement of client redirect URI(实际请求期间提交的回调URI)中的访问令牌将用户重定向到客户端URI