GSSContext, аутентификация Kerberos, согласованиеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 GSSContext, аутентификация Kerberos, согласование

Сообщение Anonymous »

У меня есть простая конечная точка Java для проверки учетных данных пользователя на сервере A
(здесь запускается мое 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();
}
}
сервер A использовал пользователя rikim в качестве учетных данных/в качестве учетной записи службы.
затем пользователь B пришел с токеном согласования с кэшем билетов на своем локальном компьютере в качестве пользователя < strong>ariandop
Моя проблема: когда пользователь Bariandop делает запрос.
почему мое приложение продолжает проверяться как rikim? вместо ariandop.
что-то не так с моим кодом?
пожалуйста, помогите мне, спасибо...
Я хочу, чтобы это проверить как ariandop, что является реальными учетными данными пользователя на их локальном компьютере.
вместо этого аутентифицироваться как rikim, который является учетной записью службы.
как я могу этого добиться

Подробнее здесь: https://stackoverflow.com/questions/791 ... -negotiate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»