Jira 5.2 Seraph SSO登录反向代理

时间:2013-04-29 07:44:19

标签: single-sign-on jira reverse-proxy webseal

因为几天我试图为Jira 5.2启用SSO并且想通了,Jira的帮助页面已经过时了。

每个示例都使用旧版本的atlassian-seraph(Jira 5.2使用2.6.0)。

目标: 如果我登录Webseal(反向代理),我想自动登录Jira。

背景

sequence diagram

  • Jira背后是反向代理(见图)。
  • 此代理会对用户进行身份验证并保留会话。
  • 如果我已登录,我也希望登录Jira
  • 提供的唯一信息是用户名

问题:

如何编写自定义登录模块,从http_header读取用户名并对用户进行身份验证?

链接:

2 个答案:

答案 0 :(得分:11)

最后我自己想出来了:

  1. 您需要自定义身份验证器

    public class MyCustomAuthenticator extends DefaultAuthenticator {
    
      protected boolean authenticate(Principal user, String password)
        throws AuthenticatorException {
        return true;
      }
    
      protected Principal getUser(String username) {
       return getCrowdService().getUser(username);
      }
    
      private CrowdService getCrowdService() {
        return (CrowdService)ComponentManager.getComponent(CrowdService.class);
      }
    }
    
  2. 将MyCustomAuthenticator添加到seraph-config.xml

    <authenticator class="com.company.jira.MyCustomAuthenticator"/>
    
  3. 编写自定义过滤器以从http-header

    设置用户名
    public class CustomFilter extends PasswordBasedLoginFilter {
    
        @Override
        protected UserPasswordPair extractUserPasswordPair(
            HttpServletRequest request) {
            String username = request.getHeader("iv-header");
    
            if (username != null && username.trim().length() != 0) {
                return new PasswordBasedLoginFilter.UserPasswordPair(
                    username, "DUMMY", false);
            }
            return null;
        }
    }
    

  4. 替换web.xml中的过滤器

    <filter>
       <filter-name>login</filter-name>
       <filter-class>com.company.jira.CustomFilter</filter-class>
     </filter>
    
  5. Jira 5.2需要这些jar

    • 嵌入式人群-API-2.6.2
    • JIRA核-5.2.1
    • Atlassian的-撒拉弗-2.6.0

答案 1 :(得分:1)

我不熟悉Jira身份验证,但我确实理解SiteMinder / WebSeal身份验证。

两个系统都对用户进行身份验证,并在HTTP标头中发送用户名。 可以配置HTTP标头的名称。此外,他们还可以发送其他用户属性,例如其他HTTP标头中的用户电子邮件。 要对SiteMinder / WebSeal后面的用户进行身份验证,只需要使用HTTP标头并使用标头中的用户名创建应用程序会话。

你绝对可以在Jira解决它。您有两个选择:

  1. 使用已创建的SiteMinder身份验证器: https://confluence.atlassian.com/display/DEV/SiteMinder+Custom+Seraph+Authenticator+for+Confluence 我没有找到如何配置用户名标头的HTTP标头名称的问题。它假定标题名称为uid 您需要在WebSeal中配置标头uid或尝试获取源并使标头名称可配置。
  2. 根据您的链接实施您自己的身份验证器: http://docs.atlassian.com/atlassian-seraph/latest/sso.html 使用代码获取用户名 httpServletRequest.getHeader(userNameHeaderName);