Существуют примеры использования нескольких типов аутентификаторов в одном приложении Play Framework. НО тот, который мне нужен, - это использование 2 аутентификаторов JWT, где они имеют разные headerNames, утверждения эмитента и crypter, используя отдельные среды Silhouette.для каждого внутри одного и того же приложения.
Обновление: я создал 2 среды для Silhouette, но обе подписи одинаковы только с разными именами, как показано ниже:
trait DefaultEnv extends Env {
type I = User
type A = JWTAuthenticator
}
trait CustomEnv extends Env {
type I = User
type A = JWTAuthenticator
}
MyModule extends AbstractModule with ScalaModule {
...
@Provides
def provideAuthenticatorService(crypter: Crypter,
idGenerator: IDGenerator,
configuration: Configuration,
clock: Clock): AuthenticatorService[JWTAuthenticator] = {
val encoder = new CrypterAuthenticatorEncoder(crypter)
new JWTAuthenticatorService(JWTAuthenticatorSettings(
fieldName = configuration.underlying.getString("silhouette.authenticator.headerName"),
issuerClaim = configuration.underlying.getString("silhouette.authenticator.issuerClaim"),
authenticatorExpiry = FiniteDuration(configuration.underlying.getLong("silhouette.authenticator.authenticatorExpiry"), "seconds"),
sharedSecret = configuration.underlying.getString("application.secret")
), None, encoder, idGenerator, clock)
}
}
Это фактически обеспечивает то же самое AuthenticatorService
, как предоставить разные AuthenticatorService
для разных именованных сред, в то время как они на самом деле AuthenticatorService[JWTAuthenticator]
?