Как новичок в ИТ-индустрии, я пытаюсь отправить запрос SAML своему поставщику удостоверений (Keycloak), используя следующий подход. Однако я сталкиваюсь с ошибкой «InvalidRequest» при перенаправлении на URL-адрес конечной точки авторизации, который я установил как «http://localhost:8080/realms/realmsname/protocol/saml».
String samlRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<samlp:AuthnRequest
xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" "
+ "xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" "
+ "ID=\""+ Instant.now().toEpochMilli() + "\" "
+ "Version=\"2.0\" "
+"IssueInstant=\"" + Instant.now() + "\" "
+ "ProtocolBinding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" "
+ "AssertionConsumerServiceURL=\"http:localhost:8001/saml/login\">"
+ "<saml:Issuer>http://localhost:8080/realms/<></saml:Issuer>"
+ "<samlp:NameIDPolicy Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\" AllowCreate=\"true\"/>"
+ "</samlp:AuthnRequest>";
// Encode SAML request into Base64 (no need for compression)
String base64Encoded = Base64.toBase64String(samlRequest.getBytes());
URL url = new URL(deploymentUtil.getIdpAuthorizationEndpoint());
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// Redirect user to the Keycloak authorization endpoint
String redirectUrl = url+ "?SAMLRequest = " + base64Encoded;
resp.sendRedirect(redirectUrl);
пожалуйста, если кто-нибудь знает об этом, пожалуйста, помогите мне.
Я попробовал это и попытался проверить некоторые онлайн-инструменты для проверки запроса Saml, и я получаю ошибку как Неверный запрос SAML AuthN. Не соответствует протоколу saml-schema-2.0.xsd.
<samlp:AuthnRequest xmlns:samlp = "urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml = "urn:oasis:names:tc:SAML:2.0:assertion" ID = "1712556379904" Version = "2.0" IssueInstant = "2024-04-08T06:06:19.904Z" ProtocolBinding = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL = "http://localhost:8005/sso/restapp/saml/login"><saml:Issuer>"http://localhost:8080/realms/<realmsName>" </saml:Issuer>
<samlp:NameIDPolicy Format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" AllowCreate = "true"/>
<samlp:RequestedAuthnContext Comparison = "exact">
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
</samlp:RequestedAuthnContext>
</samlp:AuthnRequest>
Выполнив дополнительную проверку с помощью онлайн-инструментов Online Now, я получаю ЗАПРОС SAML AUTHN REQUEST IS VALID. Но тем не менее я столкнулся с недействительным запросом в keycloak.
<?xml version = "1.0" encoding = "UTF-8"?><samlp:AuthnRequest xmlns:samlp = "urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml = "urn:oasis:names:tc:SAML:2.0:assertion" ID = "_882154b2ee4fa83b774e16a149713064" Version = "2.0" IssueInstant = "2024-04-09T11:48:28.540Z" ProtocolBinding = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL = "http://localhost:8001/rbac/login/cas"><saml:Issuer>http://localhost:8080/realms/OBSuiteRealm</saml:Issuer><samlp:NameIDPolicy Format = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" AllowCreate = "true"/><samlp:RequestedAuthnContext xmlns:samlp = "urn:oasis:names:tc:SAML:2.0:protocol" Comparison = "exact"><saml:AuthnContextClassRef xmlns:saml = "urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></samlp:RequestedAuthnContext></samlp:AuthnRequest>
И URL-адрес перенаправления - это что-то в этом роде
http://127.0.0.1:8080/realms/releamname/protocol/saml?SAMLRequest=nVNNb+MgFPw............





Мой поставщик удостоверений, за исключением привязки HTTP-Redirect, и я пытаюсь отправить запрос SamlAuthn с использованием привязки HTTP-Post.
Когда вы используете привязку HTTP-Redirect, вам необходимо отправить запрос Saml. который был сжат и (Deflate+Base64+UrlEncoder с использованием UTF-8)
ClientId должен совпадать с EntityId поставщика услуг.