Merge branch 'feature/SUPPORT-8822' into develop
This commit is contained in:
commit
e70a5c1b81
1 changed files with 15 additions and 12 deletions
|
|
@ -44,6 +44,7 @@ import ru.micord.ervu.security.esia.model.EsiaHeader;
|
||||||
import ru.micord.ervu.security.esia.model.EsiaTokenResponse;
|
import ru.micord.ervu.security.esia.model.EsiaTokenResponse;
|
||||||
import ru.micord.ervu.security.esia.model.FormUrlencoded;
|
import ru.micord.ervu.security.esia.model.FormUrlencoded;
|
||||||
import ru.micord.ervu.security.esia.model.PersonModel;
|
import ru.micord.ervu.security.esia.model.PersonModel;
|
||||||
|
import ru.micord.ervu.security.esia.model.SignResponse;
|
||||||
import ru.micord.ervu.security.esia.EsiaAuthInfoStore;
|
import ru.micord.ervu.security.esia.EsiaAuthInfoStore;
|
||||||
import ru.micord.ervu.security.esia.config.EsiaConfig;
|
import ru.micord.ervu.security.esia.config.EsiaConfig;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
@ -102,7 +103,6 @@ public class EsiaAuthService {
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
|
||||||
ZonedDateTime dt = ZonedDateTime.now();
|
ZonedDateTime dt = ZonedDateTime.now();
|
||||||
String timestamp = dt.format(formatter);
|
String timestamp = dt.format(formatter);
|
||||||
String state = UUID.randomUUID().toString();
|
|
||||||
String prnsUUID = UUID.randomUUID().toString();
|
String prnsUUID = UUID.randomUUID().toString();
|
||||||
Cookie oldPrnsCookie = WebUtils.getCookie(request, PRNS_UUID);
|
Cookie oldPrnsCookie = WebUtils.getCookie(request, PRNS_UUID);
|
||||||
if (oldPrnsCookie != null) {
|
if (oldPrnsCookie != null) {
|
||||||
|
|
@ -117,10 +117,12 @@ public class EsiaAuthService {
|
||||||
parameters.put("client_id", clientId);
|
parameters.put("client_id", clientId);
|
||||||
parameters.put("scope", scope);
|
parameters.put("scope", scope);
|
||||||
parameters.put("timestamp", timestamp);
|
parameters.put("timestamp", timestamp);
|
||||||
parameters.put("state", state);
|
parameters.put("state", "%s");
|
||||||
parameters.put("redirect_uri", esiaConfig.getRedirectUrl());
|
parameters.put("redirect_uri", esiaConfig.getRedirectUrl());
|
||||||
|
|
||||||
String clientSecret = signMap(parameters);
|
SignResponse signResponse = signMap(parameters);
|
||||||
|
String state = signResponse.getState();
|
||||||
|
String clientSecret = signResponse.getSignature();
|
||||||
EsiaAuthInfoStore.addState(prnsUUID, state, esiaConfig.getEsiaStateCookieLifeTime(), esiaConfig.getEsiaLoginAttemptsCount());
|
EsiaAuthInfoStore.addState(prnsUUID, state, esiaConfig.getEsiaStateCookieLifeTime(), esiaConfig.getEsiaLoginAttemptsCount());
|
||||||
ResponseCookie prnsCookie = securityHelper.createAccessCookie(PRNS_UUID, prnsUUID)
|
ResponseCookie prnsCookie = securityHelper.createAccessCookie(PRNS_UUID, prnsUUID)
|
||||||
.maxAge(esiaConfig.getEsiaStateCookieLifeTime())
|
.maxAge(esiaConfig.getEsiaStateCookieLifeTime())
|
||||||
|
|
@ -185,7 +187,6 @@ public class EsiaAuthService {
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
|
||||||
ZonedDateTime dt = ZonedDateTime.now();
|
ZonedDateTime dt = ZonedDateTime.now();
|
||||||
String timestamp = dt.format(formatter);
|
String timestamp = dt.format(formatter);
|
||||||
String newState = UUID.randomUUID().toString();
|
|
||||||
String redirectUrl = esiaConfig.getRedirectUrl();
|
String redirectUrl = esiaConfig.getRedirectUrl();
|
||||||
String scope = esiaConfig.getEsiaScopes();
|
String scope = esiaConfig.getEsiaScopes();
|
||||||
|
|
||||||
|
|
@ -193,13 +194,14 @@ public class EsiaAuthService {
|
||||||
parameters.put("client_id", clientId);
|
parameters.put("client_id", clientId);
|
||||||
parameters.put("scope", scope);
|
parameters.put("scope", scope);
|
||||||
parameters.put("timestamp", timestamp);
|
parameters.put("timestamp", timestamp);
|
||||||
parameters.put("state", newState);
|
parameters.put("state", "%s");
|
||||||
parameters.put("redirect_uri", redirectUrl);
|
parameters.put("redirect_uri", redirectUrl);
|
||||||
parameters.put("code", esiaAuthCode);
|
parameters.put("code", esiaAuthCode);
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
String clientSecret = signMap(parameters);
|
SignResponse signResponse = signMap(parameters);
|
||||||
signSecret = System.currentTimeMillis() - startTime;
|
signSecret = System.currentTimeMillis() - startTime;
|
||||||
|
String newState = signResponse.getState();
|
||||||
|
String clientSecret = signResponse.getSignature();
|
||||||
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl();
|
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl();
|
||||||
String postBody = new FormUrlencoded()
|
String postBody = new FormUrlencoded()
|
||||||
.setParameter("client_id", clientId)
|
.setParameter("client_id", clientId)
|
||||||
|
|
@ -289,18 +291,19 @@ public class EsiaAuthService {
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
|
||||||
ZonedDateTime dt = ZonedDateTime.now();
|
ZonedDateTime dt = ZonedDateTime.now();
|
||||||
String timestamp = dt.format(formatter);
|
String timestamp = dt.format(formatter);
|
||||||
String state = UUID.randomUUID().toString();
|
|
||||||
String redirectUrl = esiaConfig.getRedirectUrl();
|
String redirectUrl = esiaConfig.getRedirectUrl();
|
||||||
|
|
||||||
Map<String, String> parameters = new LinkedHashMap<String, String>();
|
Map<String, String> parameters = new LinkedHashMap<String, String>();
|
||||||
parameters.put("client_id", clientId);
|
parameters.put("client_id", clientId);
|
||||||
parameters.put("scope", esiaConfig.getEsiaScopes());
|
parameters.put("scope", esiaConfig.getEsiaScopes());
|
||||||
parameters.put("timestamp", timestamp);
|
parameters.put("timestamp", timestamp);
|
||||||
parameters.put("state", state);
|
parameters.put("state", "%s");
|
||||||
parameters.put("redirect_uri", esiaConfig.getRedirectUrl());
|
parameters.put("redirect_uri", esiaConfig.getRedirectUrl());
|
||||||
parameters.put("refresh_token", refreshToken);
|
parameters.put("refresh_token", refreshToken);
|
||||||
|
|
||||||
String clientSecret = signMap(parameters);
|
SignResponse signResponse = signMap(parameters);
|
||||||
|
String state = signResponse.getState();
|
||||||
|
String clientSecret = signResponse.getSignature();
|
||||||
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl();
|
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl();
|
||||||
String postBody = new FormUrlencoded()
|
String postBody = new FormUrlencoded()
|
||||||
.setParameter("client_id", clientId)
|
.setParameter("client_id", clientId)
|
||||||
|
|
@ -353,7 +356,7 @@ public class EsiaAuthService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String signMap(Map<String, String> paramsToSign) {
|
private SignResponse signMap(Map<String, String> paramsToSign) {
|
||||||
try {
|
try {
|
||||||
StringBuilder toSign = new StringBuilder();
|
StringBuilder toSign = new StringBuilder();
|
||||||
for (String s : paramsToSign.values()) {
|
for (String s : paramsToSign.values()) {
|
||||||
|
|
@ -372,7 +375,7 @@ public class EsiaAuthService {
|
||||||
.build()
|
.build()
|
||||||
.send(request, HttpResponse.BodyHandlers.ofString());
|
.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
errorHandler(response);
|
errorHandler(response);
|
||||||
return response.body();
|
return objectMapper.readValue(response.body(), SignResponse.class);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue