9

几天以来,我试图为 Jira 5.2 启用 SSO,并发现 Jira 的帮助页面已经过时。

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

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

背景:

序列图

  • Jira 在反向代理后面(见图)。
  • 该代理对用户进行身份验证并保持会话。
  • 如果我已登录,我也想在 Jira 中登录
  • 提供的唯一信息是用户名

问题:

如何编写从 http_header 读取用户名并验证用户的自定义登录模块?

链接:

4

2 回答 2

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>
    

Jira 5.2 需要这些 jar

  • 嵌入式人群 api-2.6.2
  • jira-core-5.2.1
  • atlassian-seraph-2.6.0
于 2013-05-22T07:23:19.713 回答
1

我不熟悉 Jira 身份验证,但我非常了解 SiteMinder/WebSeal 身份验证。

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

你绝对可以在 Jira 中解决它。您有 2 个选项:

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