Как Spring Security/OAuth намира AuthenticationPrincipal

Имам пролетен проект, който използва spring-oauth2 и spring-security за удостоверяване с помощта на LDAP доставчик на удостоверяване.

В контролерите мога да получа достъп до UserDetails на текущия принципал, използвайки анотацията @AuthenticationPrincipal.

Въпреки това, когато достигна крайната точка с client_credential token, @AuthenticationPrincipal е String, което е идентификаторът на OAuth клиент. Разбирам, че няма понятие за потребител, когато се удостоверявате с client_credentials, но бих искал моят принципал да бъде по-богат тип данни. Как spring решава да зададе моя принципал като String и мога ли да отменя това поведение?


person Lee Avital    schedule 30.07.2015    source източник


Отговори (1)


От спецификациите на Oauth2

Идентификационните данни на клиента (или други форми на клиентско удостоверяване) могат да се използват като разрешение за оторизация, когато обхватът на оторизацията е ограничен до защитените ресурси под контрола на клиента или до защитените ресурси, предварително договорени със сървъра за оторизация. Идентификационните данни на клиента се използват като разрешение за оторизация обикновено, когато клиентът действа от свое име (клиентът също е собственик на ресурс) или иска достъп до защитени ресурси въз основа на оторизация, предварително договорена със сървъра за оторизация.

тъй като клиентът може също да бъде собственик на ресурс, следователно spring ще създаде удостоверяване въз основа на вашата клиентска информация.

Предполагам, че имате настройка org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter, която се използва за създаване на удостоверяване за клиента.

Можете да създадете свой собствен персонализиран org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService или да създадете свой собствен org.springframework.security.authentication.AuthenticationProvider, за да замените начина, по който се създава обектът за удостоверяване, но аз предпочитам да използвам org.springframework.security.oauth2.provider.token.TokenEnhancer, за да добавя допълнителна информация към генерирания токен.

person KSTN    schedule 07.08.2015