有在同一个 Play Framework 应用程序中使用多种类型的身份验证器的示例,但我之后的一个是使用 2 个 JWT 身份验证器,它们具有不同的 headerNames、颁发者声明和加密器,在同一应用程序中为每个应用程序使用单独的 Silhouette 环境。
更新:我为 Silhouette 创建了 2 个环境,但两个签名都相同,只是名称不同,如下所示:
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]