我们正在将 CAS 服务器用于 JAVA Web 应用程序。 认证系统如下:
- 用户尝试访问系统上的资源 (1)
- 它获得重定向(302 Found)
- 用户输入用户名密码
- 服务器使用 cookie 进行应答并重定向到原始页面 (1)
我对这种交互是否尊重 HTTP 协议(protocol)这一事实存在争议。
如果我没有访问资源的权限 系统不应该回答 401 Unauthorized 甚至更好的 407 Proxy Authentication Needed 吗?
授权资源不能用完整的 SSL 级授权 key 来代替 Cookie 字符串吗?
添加: 使用curl -L -D 转储 header
HTTP/1.1 301 Moved Permanently
Server: nginx/0.8.54
Date: Sat, 10 Dec 2011 02:07:55 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://server.com/service/
HTTP/1.1 302 Found
Server: nginx/0.8.54
Date: Sat, 10 Dec 2011 02:07:55 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-store, max-age=0, must-revalidate
Expires: Thu, 01-Jan-1970 00:00:00 GMT
Set-Cookie: JSESSIONID=q7rjikj4spvd1fxaowjl9XXX
Location: https://server.com/login/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Sat, 10 Dec 2011 02:07:55 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.3.2
Content-Length: 6650
最佳答案
您是对的 - 您示例中的 SSO 系统实际上与 HTTP 协议(protocol)本身处于不同的级别。如果应用程序返回 401,则浏览器本身可能会处理身份验证(例如:提示用户输入用户名/密码,然后使用在 HTTP 授权 header 中编码的 Base-64 发送下一个请求)。在 HTTP 基本身份验证的情况下,用户名和密码将随每个请求一起发送到您的系统。您可以使用 Kerberos 或 NTLM 进行身份验证,在这种情况下,如果用户已经登录到网络,则身份验证可能是透明的。
也就是说,许多 SSO 系统采用将用户重定向到登录 HTML 表单,然后使用 cookie 维护 session 状态的方法。主要好处之一是您可以更好地控制登录界面的外观和感觉。通过具有 session cookie 的 SSO 系统,它可以以自己的(可能是专有的)方式拥有维护状态的所有权。
关于java - 单点登录范式是否遵守 HTTP 协议(protocol)规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8453578/