java - 单点登录范式是否遵守 HTTP 协议(protocol)规则?

标签 java http https single-sign-on cas

我们正在将 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/

相关文章:

java - 用于屏蔽字符串开头 8 个字符的正则表达式

AngularJS $资源拦截器

c# - web api 2.0过滤器实现customFilter的最佳选择

html - 如果外部包含的文件(例如 JavaScript 或 CSS)在页面上包含两次(或更多次),是否会有两次(或更多次)网络请求?

node.js - NodeJS 加密的 HTTPS 响应体

php - 即(HTTPS): generating pdf from php file doesn't work

java - 错误 : A JNI error has occurred, 请检查您的安装并重试

java - 应用程序在使用线程时只是卡在中间?

java - Spring JPA过滤器Query方法中的可选条件

node.js - 端口 80 的 HTTPS 和 SSL 问题