我正在使用spring security来验证用户身份。用户通过第三方进行身份验证,并在到达我的应用程序时进行身份验证。 为了实现这一点,我模拟了一个Authentication对象。
我没有任何用户名和密码,而只是拥有标识符。我使用自定义代码检查此标识符是否有效。
我的查询如下:
我是否需要用户名和密码才能创建身份验证对象。 我没有提供用户名和密码,我的申请工作正常。
我只是想确保我正确使用spring-security。
在Authentication对象中不输入用户名和密码是否有任何影响。我在下面的AbstractUserDetailsAuthenticationProvider中读到:
//确保我们返回用户提供的原始凭据, //因此即使使用编码密码,后续尝试也会成功。
我还实施了自定义提供程序。
答案 0 :(得分:1)
Spring Security中的refHandle = postRef.observe(FIRDataEventType.value, with: { (snapshot) in
let topicsDict = snapshot.value as! [String : AnyObject]
topicsArray = Array(topicsDict.keys)
})
接口表示用于对配置的安全规则和当前调用上下文执行验证的令牌。此界面有六种感兴趣的方法 - Authentication
,getPrincipal
,getCredentials
,getDetails
,getAuthorities
和isAuthenticated
。
由于您是自己对用户进行身份验证,因此您应该主要关注在流程中的适当阶段调用setAuthenticated
,以便setAuthenticated(true)
开始返回isAuthenticated
以指示经过身份验证的用户。此外,您可以将true
添加到GrantedAuthority
,以使任何基于角色的检查都能正常运行。
但是,确保Authentication
(表单登录时的用户名)返回每个用户或每个会话的唯一值将很有用。这将防止由于非唯一主体而导致用户会话交换的可能性,框架使用该主体来唯一地标识用户。
您可以保留getPrincipal
和getCredentials
未实现。实际上,getDetails
(表单登录时的密码)应保留在您的情况下未实现,因为您的应用程序没有用于实际验证用户的凭据;此外,在用户成功通过身份验证后保留凭据是一种安全风险。