Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add password support #54

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -51,17 +51,26 @@ abstract class TokenManager[F[_] : Concurrent, -S](config: KeycloakConfig)(impli
private val tokenEndpoint =
uri"${config.scheme}://${config.host}:${config.port}/auth/realms/${config.authn.realm}/protocol/openid-connect/token"

private val password = Map(
"grant_type" -> "client_credentials",
"client_id" -> config.authn.clientId,
"client_secret" -> config.authn.clientSecret
)
private val password = config.authn match {
case KeycloakConfig.Password(_, clientId, username, password) =>
Map(
"grant_type" -> "password",
"client_id" -> clientId,
"username" -> username,
"password" -> password
)
case KeycloakConfig.Secret(_, clientId, clientSecret) =>
Map(
"grant_type" -> "client_credentials",
"client_id" -> clientId,
"client_secret" -> clientSecret
)
}

val ref: AtomicReference[Token] = new AtomicReference()

private def refresh(token: Token): Map[String, String] = Map(
"client_id" -> config.authn.clientId,
"client_secret" -> config.authn.clientSecret,
"refresh_token" -> token.refresh,
"grant_type" -> "refresh_token"
)
Original file line number Diff line number Diff line change
@@ -9,7 +9,12 @@ final case class KeycloakConfig(scheme: String,

object KeycloakConfig {

final case class Auth(realm: String,
clientId: String,
clientSecret: String)
sealed trait Auth {
val realm: String
val clientId: String
}

final case class Password(realm: String, clientId: String, username: String, password: String) extends Auth

final case class Secret(realm: String, clientId: String, clientSecret: String) extends Auth
}
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@ object Main extends TaskApp {
val adminClient: String = "admin-cli" //Name of the admin Client inside adminRealm.
val adminSecret: String = "???" //Secret of adminClient.

val authConfig = KeycloakConfig.Auth(adminRealm, adminClient, adminSecret)
val authConfig = KeycloakConfig.Secret(adminRealm, adminClient, adminSecret)
val config = KeycloakConfig("http", host, port, targetRealm, authConfig)

def run(args: List[String]): Task[ExitCode] = Akka.connect().flatMap { _ =>
2 changes: 1 addition & 1 deletion keycloak4s-playground/src/test/scala/ValidationTests.scala
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@ class ValidationTests extends FlatSpec with Matchers with PrivateMethodTester wi
val port = 8080
val realm = "test"

val authConfig = KeycloakConfig.Auth("", "", "")
val authConfig = KeycloakConfig.Secret("", "", "")
val config = KeycloakConfig(scheme, host, port, realm, authConfig)

val validator: TokenValidator = TokenValidator.Static(TestData.jwkSet, config)
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ object AuthTestData {
val port = 8080
val realm = "test"

val authConfig = KeycloakConfig.Auth("", "", "")
val authConfig = KeycloakConfig.Secret("", "", "")
val keycloakConfig = KeycloakConfig(scheme, host, port, realm, authConfig)

implicit val validator: TokenValidator = TokenValidator.Static(TestData.jwkSet, keycloakConfig)
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ class IntegrationSpec extends AsyncFlatSpec with Matchers with Inspectors {
type T = ByteString

/* Keycloak Server Configuration **/
val authConfig = KeycloakConfig.Auth("master", "admin-cli", ServerInitializer.clientSecret)
val authConfig = KeycloakConfig.Secret("master", "admin-cli", ServerInitializer.clientSecret)
val keycloakConfig = KeycloakConfig("http", "127.0.0.1", 8080, "master", authConfig)

/* Keycloak Client Implicits **/