仅使用社交提供者登录认证时,客户端和服务器之间的认证策略应该是什么?
What should be authentication strategy between client and server when only social providers login authentication is used?
给定以下条件:
- 网站仅使用社交提供商来验证用户 (Google/Facebook)。没有本机身份验证。
- 只有部分部分(例如产品评论)受到限制。
- 网站与服务器通信(同域)。
最好的身份验证策略是什么?
- 仅使用社交提供商
在这种情况下:
- 我们需要研究每个提供商的 refresh/revoke 令牌机制并加以实施。
- 使用社交提供商来验证用户的真实性,但使用原生令牌
在这种情况下:
- 我们使用社交提供商验证用户是否真实。
- 我们生成自己的令牌并将其发送给客户端。
在我看来,第二种方法要好得多,因为:
- 无需研究如何根据每个社交提供商获取刷新令牌。
- 我们的服务器完全受控:过期时间控制。
- 撤销令牌也更容易(例如更改我们自己服务器中的秘密)。
- 错误处理更容易,因为在从社交提供者刷新令牌时不需要处理错误情况,而是可以实现我们自己的错误处理。
- 如果用户关闭 window 社交提供商刷新令牌将在几个小时后过期,而我们的令牌不会。
- 如果使用社交提供商令牌,那么它们将在每次请求时从客户端发送到服务器,这比我们自己的令牌具有更高的安全风险(google/facebook 中的用户敏感数据比我们网站中的多得多).此外,它们必须保存在客户端的某个位置以保持持久性,这同样会带来更高的安全风险。
- 社交提供商令牌不包含任何特定于我们服务器的用户信息。这意味着更频繁地查询我们的数据库以识别用户,而不是仅仅将我们的用户 ID 放入令牌(也许是 JWT 令牌)中。
对我来说最大的缺点是我们必须为每个社交提供者维护多个 refresh/revoke 机制,而不是一个(我们自己的)。
在这种情况下最好的做法是什么会很有趣。
联合登录感觉是最好的选择,它应该可以满足您上面描述的目标:
- 在登录期间,应用会重定向到您的授权服务器 (AS)
- AS 重定向到社交身份提供商 - 例如 Facebook
- 用户使用 Facebook 凭据登录
- 社交提供商向 AS 发布令牌
- AS 生成自己的令牌 return 到应用程序
- 您的应用通过令牌中的 AS 用户 ID 识别用户
- 直到下次登录才使用社交提供程序
例如,这里有一个 link 到 AWS Solution,其中每个应用程序都可以 select 它支持的社交提供商,并且可以禁用默认的 Cognito 登录选项如果需要的话。
给定以下条件:
- 网站仅使用社交提供商来验证用户 (Google/Facebook)。没有本机身份验证。
- 只有部分部分(例如产品评论)受到限制。
- 网站与服务器通信(同域)。
最好的身份验证策略是什么?
- 仅使用社交提供商
在这种情况下:
- 我们需要研究每个提供商的 refresh/revoke 令牌机制并加以实施。
- 使用社交提供商来验证用户的真实性,但使用原生令牌
在这种情况下:
- 我们使用社交提供商验证用户是否真实。
- 我们生成自己的令牌并将其发送给客户端。
在我看来,第二种方法要好得多,因为:
- 无需研究如何根据每个社交提供商获取刷新令牌。
- 我们的服务器完全受控:过期时间控制。
- 撤销令牌也更容易(例如更改我们自己服务器中的秘密)。
- 错误处理更容易,因为在从社交提供者刷新令牌时不需要处理错误情况,而是可以实现我们自己的错误处理。
- 如果用户关闭 window 社交提供商刷新令牌将在几个小时后过期,而我们的令牌不会。
- 如果使用社交提供商令牌,那么它们将在每次请求时从客户端发送到服务器,这比我们自己的令牌具有更高的安全风险(google/facebook 中的用户敏感数据比我们网站中的多得多).此外,它们必须保存在客户端的某个位置以保持持久性,这同样会带来更高的安全风险。
- 社交提供商令牌不包含任何特定于我们服务器的用户信息。这意味着更频繁地查询我们的数据库以识别用户,而不是仅仅将我们的用户 ID 放入令牌(也许是 JWT 令牌)中。
对我来说最大的缺点是我们必须为每个社交提供者维护多个 refresh/revoke 机制,而不是一个(我们自己的)。
在这种情况下最好的做法是什么会很有趣。
联合登录感觉是最好的选择,它应该可以满足您上面描述的目标:
- 在登录期间,应用会重定向到您的授权服务器 (AS)
- AS 重定向到社交身份提供商 - 例如 Facebook
- 用户使用 Facebook 凭据登录
- 社交提供商向 AS 发布令牌
- AS 生成自己的令牌 return 到应用程序
- 您的应用通过令牌中的 AS 用户 ID 识别用户
- 直到下次登录才使用社交提供程序
例如,这里有一个 link 到 AWS Solution,其中每个应用程序都可以 select 它支持的社交提供商,并且可以禁用默认的 Cognito 登录选项如果需要的话。