Как передать аутентифицированного пользователя из 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"

я изменил это на

Место расположения /

Другие вопросы по тегам