После успешного входа на сервер аутентификации он перенаправляет обратно прокси-сервер с поддержкой единого входа, но прокси-сервер не распознает, что пользователь прошел аутентификацию, поэтому он открывает страницу «Сторонние разрешения» вместо переадресации пользователя на первоначально запрошенныйзащищенный ресурс.После того, как вы нажмете «Принять» на странице разрешения третьей стороны, вы будете перенаправлены на первоначально запрошенный защищенный ресурс.
- GET http://localhost:8085/angular-example/ 302 Заголовок ответа: Расположение: http://localhost:8085/angular-example/ Заголовок ответа: Set-Cookie: JSESSIONID = 15F0789B7182469477E5F713D64A9BF3;Path = /;HttpOnly
- GET http://localhost:8085/login 302 Запрос Cookie: JSESSIONID = 15F0789B7182469477E5F713D64A9BF3 Заголовок ответа: Расположение: http://localhost:8084/oauth/authorize?client_id=zuul-proxy-example&redirect_uri=http://localhost:8085/login&response_type=code&state=SdY74y
- GET http://localhost:8084/oauth/authorize?client_id=zuul-proxy-example&redirect_uri=http://localhost:8085/login&response_type=code&state=SdY74y 302 Запрос заголовка: Cookie: JS15F0789B7182469477E5F713D64A9BF3 Заголовок ответа: расположение: http://localhost:8084/login Заголовок ответа: Set-Cookie: SESSION = Zjk5Y2Y5YTEtMjE2OC00MTRkLThmNGUtNGZlODFkOTI4MWNj;Path = /;HttpOnly;SameSite = Lax
- GET http://localhost:8084/login 200 Заголовок запроса: Cookie: JSESSIONID = 15F0789B7182469477E5F713D64A9BF3;SESSION = Zjk5Y2Y5YTEtMjE2OC00MTRkLThmNGUtNGZlODFkOTI4MWNj
- GET http://localhost:8084/oauth/authorize?client_id=zuul-proxy-example&redirect_uri=http://localhost:8085/login&response_type=code&state=SdY74y 200 Заголовок запроса: Cookie: JSESSIONID = 15F0789B7182469477E5F713364B9СЕССИЯ = MmVhODcyMmMtZDc0MS00Njk3LTk4MTktYTg4MmJhYjI4YmQ2
- POST http://localhost:8084/oauth/authorize Заголовок запроса: Cookie: JSESSIONID = 15F0789B7182469477E5F7F3649SESSION = MmVhODcyMmMtZDc0MS00Njk3LTk4MTktYTg4MmJhYjI4YmQ2 Заголовок ответа: Расположение: http://localhost:8085/login?code=KjDZ7n&state=SdY74y Заголовок ответа: Set-Cookie: SESSION =;Max-Age = 0;Истекает = чт, 1 января 1970 г. 00:00:00 по Гринвичу;Path = /;HttpOnly;SameSite = Lax
- GET http://localhost:8085/login?code=KjDZ7n&state=SdY74y 302 Заголовок запроса: Cookie: JSESSIONID = 15F0789B7182469477E5F713D64A9BF3 Заголовок ответа: Местоположение: http://localhost:8085/angular-example/ Заголовок ответа: Set-Cookie: JSESSIONID = C2016F4683C0643506643483483103103483483103483503453453453453453453453453163103503503503503503503503503503163163103503503503503503163163163503503503503503163163163503503503503503503163163503503503503503503503503503503503503503503503503503503503503503503503503503503503503163163163164164164164163484Path = /;HttpOnly
- GET http://localhost:8085/angular-example/ 200
Это прокси-сервер Spring Boot 2.1.8.RELEASE Zuul и сервер аутентификации Spring Boot 2, настроенные как можно ближе крабочий сервер аутентификации Spring Boot 1.5.x.
Настройка
- Клон https://github.com/smitchell/spring-security-5-upgrade_sso-auth-server
- mvn spring-boot: run
- Клон https://github.com/smitchell/cloud-foundry-angular-example
- mvn с пружинной загрузкой: запустить
- клон https://github.com/smitchell/cloud-foundry-angular-example
- ng serve --baseHref = / angular-example /
Шаги для воспроизведения:
- Перейдите к http://localhost:8085/angular-example/
- Войдите как «пользователь» / «пароль»
- Появится сторонняя страница авторизации.Нажмите «Согласен».
- Отображается угловая домашняя страница.
ПРОКСИ-СЕРВЕР
proxy:
permitAll:
matches: /login,/*.js,/favicon.ico,*.map,/*.css,/robots.txt
zuul:
add-proxy-headers: true
sensitiveHeaders: Cookie,Set-Cookie
ignoredPatterns: /**/health/**,/**/mappings/**
ignored-services: "*"
routes:
angular-example:
path: /angular-example/**
url: http://localhost:4200/angular-example/
auth-service:
path: /auth-example/**
url: http://localhost:4202/auth-example
sensitiveHeaders: Authorization
stripPrefix: false
security:
oauth2:
client:
accessTokenUri: http://localhost:8084/oauth/token
userAuthorizationUri: http://localhost:8084/oauth/authorize
clientId: zuul-proxy-example
clientSecret: ####
server:
port: 8085
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.authorizeRequests()
.antMatchers("/*.css","/*.js","/favicon.ico","/*.map","/robots.txt")
.permitAll()
.anyRequest().authenticated()
.and()
.logout()
.invalidateHttpSession(true).permitAll()
.logoutSuccessUrl("http://localhost:8085/angular-example/")
.and()
.csrf()
.disable();
// @formatter:on
}
КОНФИГУРАЦИЯ АВТОМАТИЧЕСКОГО СЕРВЕРА
server:
port: 8084
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1
jpa:
generate-ddl: true
hibernate:
ddl-auto: create
open-in-view: false
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.requestMatchers()
.antMatchers("/", "/oauth", "/login", "/api/authenticate", "/oauth/authorize")
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage( "/login")
.permitAll()
.and()
.logout()
.permitAll()
.and()
.addFilter(new JwtAuthenticationFilter(privateKey, authenticationManager()))
.addFilter(new JwtAuthorizationFilter(privateKey, authenticationManager()));
// @formatter:on
}
В итоге, я хочу понять, почему аутентификация не возвращает тот же параметр состояния, который не позволяет прокси-серверу узнать, что предыдущее перенаправление на сервер аутентификации прошло успешно.
Вот одинвход с нашего работающего сервера аутентификации Spring Security 4:
- GET https://test.[hostname].com/[context путь] / 302 Заголовок ответа: Расположение: http://test.[hostname].com/login Заголовок ответа: сервер:заголовок ответа cloudflare: set-cookie: __cfduid = dd164391fe59500752e3500ab3de6a23c1569423515;истекает = чт, 24-сен-20 14:58:35 GMT;Путь = /;. = Домен [имя хоста] .com;HttpOnly;Защищенный
- GET http://test.[hostname].com/login 301 Заголовок запроса: Cookie: JSESSIONID = C0C62552AAE5F7E8A420EEDD1869AA2A; VCAP_ID = b87f667f-ec72-4a1d-6265-5979 Заголовок ответа: Расположение: https://test.[hostname].com/login Заголовок ответа: Сервер: cloudflare
- GET https://test.[hostname].com/login 302 Заголовок запроса: Cookie: cfduid = dd164391fe59500752e3500ab3de6a23c1569423515;JSESSIONID = C0C62552AAE5F7E8A420EEDD1869AA2A;__VCAP_ID = b87f667f-ec72-4a1d-6265-5979 Заголовок ответа: расположение: https://auth -service-test- [hostname] .cfapps.io / oauth / authorize? Client_id = proxy-service & redirect_uri = http://test.[hostname].com/login&response_type=code&state=N2mPnD
- GET https://auth -service-test- [hostname] .cfapps.io / oauth / authorize? Client_id = proxy-service & redirect_uri = http://test.[hostname].com/login&response_type=code&state=N2mPnD 302Заголовок ответа: Расположение: https://auth -service-test- [hostname] .cfapps.io / login Заголовок ответа: Set-Cookie: SESSION = 4d4be900-b461-4a57-b18b-c5e073e04b25;Path = /;Безопасный;HttpOnly
- GET https://auth -service-test- [hostname] .cfapps.io / login Заголовок запроса: Cookie: SESSION = 4d4be900-b461-4a57-b18b-c5e073e04b25
- POST https://auth -service-test- [hostname] .cfapps.io / login 200 Заголовок запроса: Cookie: SESSION = 4d4be900-b461-4a57-b18b-c5e073e04b25 Заголовок ответа: Расположение: https://auth -service-test- [hostname] .cfapps.io / oauth / authorize? Client_id = proxy-service & redirect_uri = http://test.[hostname].com/login&response_type=code&state=N2mPnD Заголовок ответа: Set-Cookie: SESSION = 661f73be-a34a-4d3a-83d7-c8a8c682d392;Path = /;Безопасный;HttpOnly
- GET https://auth -service-test- [hostname] .cfapps.io / oauth / authorize? Client_id = proxy-service & redirect_uri = http://test.[hostname].com/login&response_type=code&state=N2mPnD 302 Запросить заголовок: Cookie: SESSION = 661f73be-a34a-4d3a-83d7-c8a8c682d392 Заголовок ответа: Расположение: http://test.[hostname].com/login?code=o8S3fA&state=N2mPnD Заголовок ответа: Set-Cookie: SESSION =;Max-Age = 0;Истекает = Чт, 01 января 1970 00:00:10 GMT;Path = /;Безопасный;HttpOnly
- GET http://test.[hostname].com/login?code=o8S3fA&state=N2mPnD 301 Заголовок запроса: Cookie: JSESSIONID = C0C62552AAE5F7E8A420EEDD1869AA2A; VCAP_ID = b87f667f-ec72-4a1d-6265-5979 Заголовок ответа: Расположение: https://test.[hostname].com/login?code=o8S3fA&state=N2mPnD
- GET https://test.[hostname].com/login?code=o8S3fA&state=N2mPnD 302 Заголовок запроса: cookie: cfduid = dd164391fe59500752e3500c156a35001526935353;JSESSIONID = C0C62552AAE5F7E8A420EEDD1869AA2A;__VCAP_ID = b87f667f-ec72-4a1d-6265-5979 Заголовок ответа: set-cookie: JSESSIONID = 8B0E676E8BFE337A598BE060EEA76126;Path = /;Заголовок ответа HttpOnly: set-cookie: VCAP_ID = b87f667f-ec72-4a1d-6265-5979;Path = /;HttpOnly
- GET https://test.[hostname].com/[context path] / 200