如何使用第三方 CAS(中央身份验证服务)为 Django-React 应用程序实现 SSO(单点登录)?

cs.*_*yan 6 django cas single-sign-on jwt reactjs

我正在设置一个 Django-React 应用程序,通过第三方 CAS 进行身份验证。CAS认证流程如下:

  1. Web 应用程序使用“service”参数将用户的浏览器重定向到 CAS 的登录 URL,例如https://cas.com/login?service=http://myapp.com

  2. 用户通过 CAS 身份验证后,CAS 会将经过身份验证的用户重定向回应用程序,并将一个名为“ticket”的参数附加到重定向的 URL 中。其票证价值是“服务票证”的一次性标识。例如,http://myapp.com/?ticket=abcdefg

  3. 然后,应用程序可以连接到 CAS“serviceValidate”端点以验证一次性服务票证。例如,https://cas.com/serviceValidate?service=http://myapp.com&ticket=abcdefg

  4. 作为响应,CAS 应返回包含经过身份验证的用户 ID 的 XML,例如,

<cas:serviceResponse>
<cas:authenticationSuccess>
<cas:user>johnd</cas:user>
</cas:authenticationSuccess>
</cas:serviceResponse>
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,发现主要可以通过两种方式实现:

  1. 将 React 作为 Django 静态内容的一部分。

  2. 通过 JWT 独立响应单页应用程序 (SPA)。

我已经尝试过第一种方法并且它有效,但问题是每次我想用 React 测试身份验证时,我需要先构建静态文件并将它们放入 Django 中,这有点慢。所以我想尝试第二种方法。

我的问题是,我可以为独立方法实施任何最佳实践吗?如果我要实现 JWT,将访问令牌存储在localStorageor中是否安全cookie

非常感谢!