Spring安全性 - 用户名和密码必须用于创建身份验证

时间:2016-09-28 10:52:31

标签: spring authentication spring-security

我正在使用spring security来验证用户身份。用户通过第三方进行身份验证,并在到达我的应用程序时进行身份验证。 为了实现这一点,我模拟了一个Authentication对象。

我没有任何用户名和密码,而只是拥有标识符。我使用自定义代码检查此标识符是否有效。

我的查询如下:

  1. 我是否需要用户名和密码才能创建身份验证对象。 我没有提供用户名和密码,我的申请工作正常。

  2. 我只是想确保我正确使用spring-security。

  3. 在Authentication对象中不输入用户名和密码是否有任何影响。我在下面的AbstractUserDetailsAuthenticationProvider中读到:

    //确保我们返回用户提供的原始凭据, //因此即使使用编码密码,后续尝试也会成功。

  4. 我还实施了自定义提供程序。

    1. 以上评论意味着什么?
    2. 我的方法是否正确?

1 个答案:

答案 0 :(得分:1)

Spring Security中的refHandle = postRef.observe(FIRDataEventType.value, with: { (snapshot) in let topicsDict = snapshot.value as! [String : AnyObject] topicsArray = Array(topicsDict.keys) }) 接口表示用于对配置的安全规则和当前调用上下文执行验证的令牌。此界面有六种感兴趣的方法 - AuthenticationgetPrincipalgetCredentialsgetDetailsgetAuthoritiesisAuthenticated

由于您是自己对用户进行身份验证,因此您应该主要关注在流程中的适当阶段调用setAuthenticated,以便setAuthenticated(true)开始返回isAuthenticated以指示经过身份验证的用户。此外,您可以将true添加到GrantedAuthority,以使任何基于角色的检查都能正常运行。

但是,确保Authentication(表单登录时的用户名)返回每个用户或每个会话的唯一值将很有用。这将防止由于非唯一主体而导致用户会话交换的可能性,框架使用该主体来唯一地标识用户。

您可以保留getPrincipalgetCredentials未实现。实际上,getDetails(表单登录时的密码)应保留在您的情况下未实现,因为您的应用程序没有用于实际验证用户的凭据;此外,在用户成功通过身份验证后保留凭据是一种安全风险。