ログインページに正しい言語を表示させるために、SAMLリクエストにリクエストパラメータ(例:locale = en)を追加する必要があります。それ、どうやったら出来るの?
beginメソッド(SamlEntryPoint)の引数として送信されたHttpServletRequestに属性を追加しようとしましたが、機能していないようです。
助言がありますか?
SAMLは、認証要求で送信されるコンテンツを拡張するための標準メカニズム(Extensions
要素)を提供します。
これを使用するには、送信するデータと形式についてIDPと調整する必要があります。Spring SAMLWebSSOProfileImpl
では、次のようにクラスを拡張することでコンテンツをカスタマイズできます。
package com.v7security.saml;
import org.opensaml.common.SAMLException;
import org.opensaml.saml2.common.Extensions;
import org.opensaml.saml2.common.impl.ExtensionsBuilder;
import org.opensaml.saml2.core.AuthnRequest;
import org.opensaml.saml2.metadata.AssertionConsumerService;
import org.opensaml.saml2.metadata.SingleSignOnService;
import org.opensaml.saml2.metadata.provider.MetadataProviderException;
import org.opensaml.xml.schema.XSAny;
import org.opensaml.xml.schema.impl.XSAnyBuilder;
import org.springframework.security.saml.context.SAMLMessageContext;
import org.springframework.security.saml.websso.WebSSOProfileImpl;
import org.springframework.security.saml.websso.WebSSOProfileOptions;
/**
* Class adds additional extensions element to the AuthnRequest sent to IDP.
*/
public class WebSSOProfile extends WebSSOProfileImpl {
@Override
protected AuthnRequest getAuthnRequest(SAMLMessageContext context, WebSSOProfileOptions options, AssertionConsumerService assertionConsumer, SingleSignOnService bindingService) throws SAMLException, MetadataProviderException {
AuthnRequest authnRequest = super.getAuthnRequest(context, options, assertionConsumer, bindingService);
authnRequest.setExtensions(buildExtensions());
return authnRequest;
}
protected Extensions buildExtensions() {
XSAny languageClass = new XSAnyBuilder().buildObject("http://www.v7security.com/schema/2015/04/request", "RequestLanguage", "req");
languageClass.setTextContent("urn:v7security:request:lang:english");
Extensions extensions = new ExtensionsBuilder().buildObject();
extensions.getUnknownXMLObjects().add(languageClass);
return extensions;
}
}
もう1つのオプションはrelayState
、でデータを送信することです。これは、SPがIDPに送信できる情報の一部であり、データが返送されることを期待できます(通常はSPの状態)。値はIDPに対して不透明であると想定されていますが、もちろん、たとえば意図した方法で処理することもできます。リレー状態の設定の詳細については、マニュアルのSP初期化SSOの章を参照してください。
HttpRequest
オブジェクトにリクエストパラメータを設定しても結果が得られることは期待されていません。SpringSAMLはこれらを自動的に伝達しません。
クラスHTTPRedirectDeflateEncoder
を拡張してメソッドをオーバーライドすることにより、HTTPリダイレクトバインディングで送信されたリクエストにHTTPパラメータを追加することができますbuildRedirectURL
。次に、次の方法で、新しいクラスをのコンストラクターに指定しHTTPRedirectDeflateBinding
、のBeanredirectBinding
に置き換えることができsecurityContext.xml
ます。
<bean id="redirectBinding" class="org.springframework.security.saml.processor.HTTPRedirectDeflateBinding">
<constructor-arg>
<bean class="org.opensaml.saml2.binding.decoding.HTTPRedirectDeflateDecoder">
<constructor-arg name="pool" ref="parserPool"/>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="com.custom.HTTPRedirectDeflateEncoder"/>
</constructor-arg>
</bean>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加