Как передать аутентифицированного пользователя из apache kerberos в запросы GET tomcat
Я использую Kerberos Mod с apache для аутентификации пользователя Windows на наших сайтах интрасети, которые размещены на серверах Ubuntu. Бэкэнд, который получает данные, - это tomcat. соответствующий сайт делает запрос GET на https://sitename/user/logMeIn. Когда я пытаюсь получить имя пользователя из заголовка, его там нет.
Я пробовал добавить RequestHeader set X-Remote-User expr=%{REMOTE_USER} RequestHeader set X-REMOTE-USER %{REMOTE_USER}s в файл виртуального хоста apache в отдельных случаях
файл виртуального хоста apache
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [serverAdmin]
ServerName [SiteName]
ServerAlias [SiteName]
DocumentRoot [Directory]
JkMount /ConferenceSchedulerService/* ConferenceSchedulerServicetomcat
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile [CertFilePath]
SSLCertificateKeyFile [CertKeyFilePath]
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
<Directory "/var/www/schedulemeetingtestcom/html">
AuthzSendForbiddenOnFailure On
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "SSO Failed please enter you windows login"
AuthType Kerberos
KrbAuthRealms CORP.COMPANYNAME.COM
KrbServiceName HTTP/schedulemeetingtest.com
#KrbServiceName Any
Krb5KeyTab /etc/krb5.keytab
KrbMethodK5Passwd off
KrbLocalUserMapping on
KrbSaveCredentials on
SSLRequireSSL
Require valid-user
RequestHeader set X-Remote-User expr=%{REMOTE_USER}
#RequestHeader set X-REMOTE-USER %{REMOTE_USER}s
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
Код Java Spring
@Controller
@RequestMapping("/user")
public class UserController extends BaseController {
@Autowired
ApplicationUserAccessLdapService ldapSrv;
@Autowired
private HttpServletRequest request;
@PostMapping(value="/logMeIn")
public ResponseEntity<?> auth(
){
request.getHeaderNames().toString();
Enumeration<String> header = request.getHeaderNames();
Map<String, String> map = new HashMap<String, String>();
while (header.hasMoreElements()) {
String key = (String) header.nextElement();
String value = request.getHeader(key);
map.put(key, value);
}
try{
map.put("RemoteUserName", request.getRemoteUser());
}catch(Exception e){
map.put("RemoteUserName", "Unknown");
}
try{
map.put("RemoteAddress", request.getRemoteAddr());
}catch(Exception e){
map.put("RemoteAddress", "Unknown");
}
try{
map.put("AuthType", request.getAuthType());
}catch(Exception e){
map.put("AuthType", "Unknown");
}
try{
map.put("SeverletPath", request.getServletPath());
}catch(Exception e){
map.put("SeverletPath", "Unknown");
}
try{
map.put("PrincipalName", request.getUserPrincipal().getName());
}catch(Exception e){
map.put("PrincipalName", "Unknown");
}
return new ResponseEntity(map,HttpStatus.OK);
}
}
Я вообще не получаю имя пользователя, и, возможно, это потому, что мод kerberos не передает имя пользователя после начальной аутентификации. Но он мне все еще нужен после того, как ниже будет ответ на запрос на получение
Accept-Encoding: "gzip, deflate, br"
Accept-Language: "en-US,en;q=0.9"
AuthType: нуль
Происхождение: " https://schedulemeetingtest.riverstonegroup.com/"
PrincipalName: "Неизвестно"
RemoteAddress: "192.168.93.140"
RemoteUserName: нуль
Sec-Fetch-Mode: "корс"
Sec-Fetch-Site: "того же происхождения"
SeverletPath: "/ пользователь / logMeIn"
accept: "приложение /json, текст / простой, /"
соединение: "держать в живых"
длина содержимого: "0"
тип содержимого: "приложение / x-www-form-urlencoded"
host: "schedulemeetingtest.riverstonegroup.com"
referer: "https://schedulemeetingtest.riverstonegroup.com/"
пользовательский агент: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, например, Gecko) Chrome/76.0.3809.132 Safari/537.36"
Я бы хотел, чтобы RemoteUserName показывал пользователю не null
1 ответ
Я понял свою проблему
в каталоге
Каталог "/var/www/schedulemeetingtestcom/html"
я изменил это на
Место расположения /