我这里采用了一个简单的做法:一个单独的登陆应用,然后每个应用由一个LoginAdaptor来接收处理登陆应用的处理结果(URL),
登陆应用:统一验证登陆,然后转交给LoginAdaptor为相应的应用进行用户授权。
LoginAdaptor:接受到"登陆应用"的处理结果后,进行授权。
CheckLogin: 检查用户是否登陆,否则转向到"登陆应用"
登陆应用
登陆请求方式是
targetApp=app1
targetURL=user_request_target_url
如果该用户在这里没有登陆过,则要求登陆,否则直接获取用户ID,根据targetApp知道相应的LoginAdaptor的url(例如http://xxx/LoginAdaptor),把用户ID,user_request_target_url等拼接成一个URL让客户redirect到
http://xxx/LoginAdaptor?user_request_target_url&authed_userid=xxx&check_key=xxx&hashed_value=xxx
LoginAdaptor
接收到上面的请求后,根据本地的方式授予authed_userid相应的权限(例如在session中设置或者设置remoteUser),然后转向到user_request_target_url处理应用,check_key和hashed_value是用来进行安全检查的(例如check_key可以与时间相关,hashed_value则是checked_key经过某种算法例如md5得到的结果)
描述有点混乱,希望能看明白和有所帮助!