Я добавил свое веб-приложение в onelogin, используя Тестовый коннектор SAML. На вкладке «Конфигурация» я указал следующие значения
Получатель: http://localhost:8080/em/live/pages/samlAuth/
ACS (потребительский) URL Validator *: ^
ACS (потребительский) URL *: http://localhost:8080/ws_em/rest/accounts/consume-saml
URL для входа: http: // localhost: 8080 / ws_em / rest / accounts / produce-saml < / а>
Где http://localhost:8080/ws_em/rest/accounts/produce-saml создает запрос SAML, принимая IssuerUrl, конечную точку SAML, скопированную из вкладки SSO Onelogin, и URL-адрес ACS как http://localhost:8080/ws_em/rest/accounts/consume-saml.
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/produce-saml")
public com.virima.em.core.Response SAMLAuthentication(){
com.Response resp = new com.Response();
AppSettings appSettings = new AppSettings();
appSettings.setAssertionConsumerServiceUrl(ACSUrl);
appSettings.setIssuer(IssuerUrl));
AccountSettings accSettings = new AccountSettings();
accSettings.setIdpSsoTargetUrl(IdpSsoTargetUrl);
AuthRequest authReq = new AuthRequest(appSettings,accSettings);
Map<String, String[]> parameters = request.getParameterMap();
String relayState = null;
for(String parameter : parameters.keySet()) {
if(parameter.equalsIgnoreCase("relaystate")) {
String[] values = parameters.get(parameter);
relayState = values[0];
}
}
String reqString = authReq.getSSOurl(relayState);
response.sendRedirect(reqString);
resp.setResponse(reqString);
return resp;
}
http://localhost:8080/ws_em/rest/accounts/consume-saml Calls должен принять мой запрос SAML и выполнить аутентификацию. Здесь я использую сертификат, созданный на вкладке Onelogin SSO.
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/consume-saml")
public com.onelogin.saml.Response SAMLAuthenticationResponse(){
com.onelogin.saml.Response samlResponse = null;
String certificateS ="c"; //Certificate downloaded from Onelogin SSO Tab
AccountSettings accountSettings = new AccountSettings();
accountSettings.setCertificate(certificateS);
samlResponse = new com.onelogin.saml.Response(accountSettings,request.getParameter("SAMLResponse"),request.getRequestURL().toString());
if (samlResponse.isValid()) {
// the signature of the SAML Response is valid. The source is trusted
java.io.PrintWriter writer = response.getWriter();
writer.write("OK!");
String nameId = samlResponse.getNameId();
writer.write(nameId);
writer.flush();
} else {
// the signature of the SAML Response is not valid
java.io.PrintWriter writer = response.getWriter();
writer.write("Failed\n");
writer.write(samlResponse.getError());
writer.flush();
}
return samlResponse;
}
Я получаю эту ошибку
Исключение федерации: неверный URL-адрес. Обратитесь к своему администратору.
Кажется, он не входит в URL-адрес ACS, который у меня есть в моем приложении.
Есть ли ошибки в моей конфигурации? Или есть способ лучше?