(здесь запускается мое Java-приложение)
поэтому, когда пользователь нажимает /kerberos-auth, это должно иметь возможность проверять личность пользователя
, подключающегося к тому же AD. Пользователь должен принести токен переговоров
это код
Код: Выделить всё
public LoginResponse authenticateWithKerberos(String kerberosToken) throws GSSException {
System.setProperty("java.security.krb5.conf", "C:/Windows/krb5.conf");
System.setProperty("java.security.auth.login.config", "C:/Windows/jaas.conf");
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
System.setProperty("sun.security.krb5.disableReferrals", "true");
kerberosToken = kerberosToken.replace('-', '+').replace('_', '/');
int paddingLength = 4 - (kerberosToken.length() % 4);
if (paddingLength < 4) {
kerberosToken += "=".repeat(paddingLength);
}
byte[] tokenBytes = Base64.getDecoder().decode(kerberosToken);
GSSManager gssManager = GSSManager.getInstance();
Oid kerberosOid = new Oid(kerberosConfig.getOid());
GSSName targetName = gssManager.createName(kerberosConfig.getServiceprincipal(), GSSName.NT_HOSTBASED_SERVICE);
GSSContext gssContext = gssManager.createContext(targetName, kerberosOid, null, GSSContext.DEFAULT_LIFETIME);
gssContext.requestMutualAuth(false);
gssContext.requestCredDeleg(true);
try {
gssContext.initSecContext(tokenBytes, 0, tokenBytes.length);
int atIndex = gssContext.getSrcName().toString().indexOf('@');
String username = gssContext.getSrcName().toString().substring(0, atIndex);
DetailUserResponse detailUserResponse = getUserWithSystemDetail(username);
String token = jwtUtil.generateToken(detailUserResponse.getUser(), detailUserResponse.getSystemDetail());
return new LoginResponse(token, detailUserResponse.getUser());
}catch (Exception e){
throw new UserNotFoundException(MessageConstants.USER_NOT_FOUND);
}finally{
gssContext.dispose();
}
}
затем пользователь B пришел с токеном согласования с кэшем билетов на своем локальном компьютере в качестве пользователя < strong>ariandop
Моя проблема: когда пользователь Bariandop делает запрос.
почему мое приложение продолжает проверяться как rikim? вместо ariandop.
что-то не так с моим кодом?
пожалуйста, помогите мне, спасибо...
Я хочу, чтобы это проверить как ariandop, что является реальными учетными данными пользователя на их локальном компьютере.
вместо этого аутентифицироваться как rikim, который является учетной записью службы.
как я могу этого добиться
Подробнее здесь: https://stackoverflow.com/questions/791 ... -negotiate
Мобильная версия