因为几天我试图为Jira 5.2启用SSO并且想通了,Jira的帮助页面已经过时了。
每个示例都使用旧版本的atlassian-seraph(Jira 5.2使用2.6.0)。
目标: 如果我登录Webseal(反向代理),我想自动登录Jira。
背景
问题:
如何编写自定义登录模块,从http_header读取用户名并对用户进行身份验证?
链接:
答案 0 :(得分:11)
最后我自己想出来了:
您需要自定义身份验证器
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);
}
}
将MyCustomAuthenticator添加到seraph-config.xml
<authenticator class="com.company.jira.MyCustomAuthenticator"/>
编写自定义过滤器以从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;
}
}
替换web.xml中的过滤器
<filter>
<filter-name>login</filter-name>
<filter-class>com.company.jira.CustomFilter</filter-class>
</filter>
Jira 5.2需要这些jar
答案 1 :(得分:1)
我不熟悉Jira身份验证,但我确实理解SiteMinder / WebSeal身份验证。
两个系统都对用户进行身份验证,并在HTTP标头中发送用户名。 可以配置HTTP标头的名称。此外,他们还可以发送其他用户属性,例如其他HTTP标头中的用户电子邮件。 要对SiteMinder / WebSeal后面的用户进行身份验证,只需要使用HTTP标头并使用标头中的用户名创建应用程序会话。
你绝对可以在Jira解决它。您有两个选择:
uid
您需要在WebSeal中配置标头uid
或尝试获取源并使标头名称可配置。httpServletRequest.getHeader(userNameHeaderName);