【发布时间】:2010-10-24 14:24:07
【问题描述】:
我们有一个 ASP.NET 应用程序,客户端希望通过 Oracle SSO 保护它并且还允许匿名访问该应用程序。
标准的 Oracle SSO 插件都没有匿名访问选项,因此我们编写了一个自定义 java SSO 插件来检查 Portal/SSO 会话 cookie 并执行基本 Oracle SSOServerAuth,否则如果它们没有 SSO cookie (匿名访问)- 返回 Oracle PUBLIC 用户。
有没有人有这样的场景可以正常工作?有没有更好的方法来做到这一点?
我们使用的是 Oracle SSO IIS 插件,它在某些情况下可以工作 - 但我们发现在将用户身份验证为 oracle PUBLIC 用户后,Portal 中出现了一些奇怪的行为:
登录表单不适用于相同安全级别的自定义和默认插件。由于自定义插件的安全级别低于默认插件,因此即使用户使用其他帐户登录 Portal,PUBLIC 身份验证也会以某种方式为合作伙伴应用程序保留。
这是我们的自定义插件:
public class MixedAuthenticator
extends SSOServerAuth
implements IPASAuthInterface
{
public MixedAuthenticator()
{
}
public IPASUserInfo authenticate(HttpServletRequest request)
throws IPASAuthException, IPASInsufficientCredException
{
boolean foundPortalUser = false;
Cookie[] cookies = request.getCookies();
if(cookies != null)
{
for(int i=0; i<cookies.length; i++)
{
Cookie cookie = cookies[i];
if(cookie.getName().equalsIgnoreCase("portal"))
{
foundPortalUser = true;
}
}
}
if(foundPortalUser)
{
return super.authenticate(request);
}
else
{
IPASUserInfo anonUser = new IPASUserInfo("PUBLIC");
return anonUser;
}
public URL getUserCredentialPage(HttpServletRequest request, String message)
{
return super.getUserCredentialPage(request, message);
}
}
【问题讨论】:
标签: asp.net oracle single-sign-on