2017-02-12 6 views
1

У нас есть маркер OAuth с использованием Spring, который принимает имя пользователя/пароль/ClientId/Secret, что отлично работает. Для внешнего клиента нам просто нужно ввести имя пользователя и пароль и создать токен OAuth.Значок Spring OAuth2 без ClientId и ClientSecret для внешних клиентов

<security:http pattern="/oauth/token" create-session="stateless" 
     authentication-manager-ref="clientAuthenticationManager" 
     xmlns="http://www.springframework.org/schema/security"> 
     <security:intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY" /> 
     <security:anonymous enabled="false" /> 
    <security:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
     <!-- include this only if you need to authenticate clients via request parameters --> 
     <security:custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER" /> 
    <security:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    </security:http> 

Ниже приведен новый код, который нам нужно добавить, но он запрашивает имя пользователя и пароль в браузере.

<security:http pattern="/**external**/oauth/token" create-session="stateless" 
     authentication-manager-ref="clientAuthenticationManager" 
     xmlns="http://www.springframework.org/schema/security"> 
     <security:intercept-url pattern="/external/oauth/token" access="IS_AUTHENTICATED_FULLY" /> 
     <security:anonymous enabled="false" /> 
    <security:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
     <security:custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER" /> 
    <security:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    </security:http> 

Пожалуйста, руководство, если мы можем генерировать OAuth без ClientId и внутренне пройти ClientId генерировать OAuth.

ответ

1

Вы никогда не сможете создать токен OAuth без clientId! Oauth2 имеет 3 способа создания токена, Implicit, Code и user/pass. Последнее следует избегать, так как это означает, что клиент Oauth получит доступ к учетным данным пользователя, а OAuth был создан для предотвращения именно этого. Неявный токен предоставляется с использованием только учетных данных пользователя (обычно с участием только браузера). В режиме кода клиент OAuth получил код (не должен находиться в браузере), который затем обменивается на токен. Код для обмена Token требует, чтобы клиент Oauth аутентифицировался, используя его clientId и секрет, это обычно делается с использованием Basic Authentication.

+0

Согласен с вашей точки зрения, но то, что я хочу достичь, - это генерация токена с использованием внутренне прошедшего clientId, где пользователь только передает имя пользователя и пароль с помощью конфигурации весовой безопасности xml. – Rahul

+0

Вы говорите об издании неявного токена? С помощью Implicit grant клиент Oauth перенаправит браузер пользователя на/oauth/authorize на сервере. Этот URL-адрес защищен, поэтому браузер перенаправляется на страницу входа в систему, и пользователь аутентифицируется с использованием проверки подлинности на основе форм. После входа в браузер браузер отобразит страницу утверждения, а использование r одобрит/запретит доступ для приложения, идентифицированного clientId. Клиент OAuth никогда не должен видеть учетные данные, только доверенный сервер OAuth должен, в противном случае нет необходимости использовать OAuth. –

0

Я думаю, что вам нужно, это владелец ресурса типа гранта Пароль, который объясняется в https://tools.ietf.org/html/rfc6749#section-1.3.3

ресурсов Владелец гранта Пароль типа должен быть использован только с доверенными клиентами. Поэтому, если внешний клиент, о котором вы говорите, является доверенным клиентом (например, мобильное приложение, разработанное той же компанией, например Facebook Mobile App), это может быть использовано.

потока объясняется в https://tools.ietf.org/html/rfc6749#section-4.3.1

Самым важным аспектом владелец ресурса типа гранта является клиент не должен хранить имя пользователя и пароль.