面试题答案
一键面试1. 技术点
- 加密算法:使用如 RSA、AES 等加密算法对传输数据进行加密,保证数据在跨域传输过程中的保密性。例如,在生成令牌(token)时,对令牌内容使用 AES 加密,接收方使用相应密钥解密。
- 签名验证:采用 HMAC 等签名算法对请求和响应进行签名验证,防止数据被篡改。比如,在请求头中添加签名信息,服务器根据约定的密钥和签名算法验证签名的正确性。
- CORS 配置:合理配置跨域资源共享(CORS),允许特定的跨域请求。通过设置
Access - Control - Allow - Origin
等响应头,明确允许的跨域源,同时注意限制过于宽松的配置,避免安全漏洞。 - JWT(JSON Web Token):可以利用 JWT 来传递用户身份和权限信息。JWT 本身包含了签名部分,能有效验证数据完整性。在跨域认证中,可将 JWT 作为令牌在不同域之间传递,服务器通过验证 JWT 的签名来确认用户身份和权限。
2. 交互流程设计
- 用户请求:用户在前端应用发起请求,该请求会携带跨域信息。例如,前端页面所在域为
domain1.com
,请求后端认证服务domain2.com
的资源。 - 授权请求:前端应用将请求重定向到授权服务器(可以与后端认证服务同一域或不同域)。请求中包含客户端 ID、重定向 URI、范围(scope)等信息。
- 授权服务器验证:授权服务器验证客户端的合法性以及请求的范围等信息。如果客户端合法且用户同意授权,授权服务器生成授权码。
- 获取令牌:前端应用使用授权码向授权服务器请求令牌。此时,授权服务器生成包含用户身份和权限信息的令牌(如 JWT),可以使用上述加密和签名技术对令牌进行处理。
- 跨域资源请求:前端应用携带令牌向目标资源服务器(
domain2.com
)发起资源请求。资源服务器验证令牌的有效性,包括签名验证、过期时间检查等。如果令牌有效,资源服务器返回请求的资源。
3. 与现有 OAuth 标准的兼容性处理
- 遵循标准协议:在设计自定义扩展时,尽量遵循 OAuth 2.0 的核心规范,如授权码模式、隐式授权模式等的基本流程。确保基本的授权和认证流程与标准 OAuth 一致,这样现有基于 OAuth 的客户端和服务器可以在一定程度上兼容扩展后的机制。
- 扩展字段和参数:对于自定义的安全需求,可以通过在标准 OAuth 请求和响应中添加自定义字段或参数来实现。但要注意这些扩展字段应具有明确的命名空间,避免与标准字段冲突。例如,在 JWT 的自定义 claims 中添加特定安全需求相关的信息。
- 版本标识:在请求和响应中添加版本标识,表明当前使用的 OAuth 扩展版本。这样服务器和客户端可以根据版本标识决定如何处理请求和响应,对于不支持的版本可以进行适当的错误处理。