Bindings
Allows for creating and managing realm authentication flow bindings within Keycloak. Authentication flows describe a sequence of actions that a user or service must perform in order to be authenticated to Keycloak. The authentication flow itself is a container for these actions, which are otherwise known as executions. Realms assign authentication flows to supported user flows such as registration
and browser
. This resource allows the updating of realm authentication flow bindings to custom authentication flows created by keycloak.authentication.Flow
. Note that you can also use the keycloak.Realm
resource to assign authentication flow bindings at the realm level. This resource is useful if you would like to create a realm and an authentication flow, and assign this flow to the realm within a single run of pulumi up
. In any case, do not attempt to use both the arguments within the keycloak.Realm
resource and this resource to manage authentication flow bindings, you should choose one or the other.
Example Usage
import * as pulumi from "@pulumi/pulumi";
import * as keycloak from "@pulumi/keycloak";
const realm = new keycloak.Realm("realm", {
realm: "my-realm",
enabled: true,
});
const flow = new keycloak.authentication.Flow("flow", {
realmId: realm.id,
alias: "my-flow-alias",
});
// first execution
const executionOne = new keycloak.authentication.Execution("execution_one", {
realmId: realm.id,
parentFlowAlias: flow.alias,
authenticator: "auth-cookie",
requirement: "ALTERNATIVE",
});
// second execution
const executionTwo = new keycloak.authentication.Execution("execution_two", {
realmId: realm.id,
parentFlowAlias: flow.alias,
authenticator: "identity-provider-redirector",
requirement: "ALTERNATIVE",
}, {
dependsOn: [executionOne],
});
const browserAuthenticationBinding = new keycloak.authentication.Bindings("browser_authentication_binding", {
realmId: realm.id,
browserFlow: flow.alias,
});
import pulumi
import pulumi_keycloak as keycloak
realm = keycloak.Realm("realm",
realm="my-realm",
enabled=True)
flow = keycloak.authentication.Flow("flow",
realm_id=realm.id,
alias="my-flow-alias")
# first execution
execution_one = keycloak.authentication.Execution("execution_one",
realm_id=realm.id,
parent_flow_alias=flow.alias,
authenticator="auth-cookie",
requirement="ALTERNATIVE")
# second execution
execution_two = keycloak.authentication.Execution("execution_two",
realm_id=realm.id,
parent_flow_alias=flow.alias,
authenticator="identity-provider-redirector",
requirement="ALTERNATIVE",
opts = pulumi.ResourceOptions(depends_on=[execution_one]))
browser_authentication_binding = keycloak.authentication.Bindings("browser_authentication_binding",
realm_id=realm.id,
browser_flow=flow.alias)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Keycloak = Pulumi.Keycloak;
return await Deployment.RunAsync(() =>
{
var realm = new Keycloak.Realm("realm", new()
{
RealmName = "my-realm",
Enabled = true,
});
var flow = new Keycloak.Authentication.Flow("flow", new()
{
RealmId = realm.Id,
Alias = "my-flow-alias",
});
// first execution
var executionOne = new Keycloak.Authentication.Execution("execution_one", new()
{
RealmId = realm.Id,
ParentFlowAlias = flow.Alias,
Authenticator = "auth-cookie",
Requirement = "ALTERNATIVE",
});
// second execution
var executionTwo = new Keycloak.Authentication.Execution("execution_two", new()
{
RealmId = realm.Id,
ParentFlowAlias = flow.Alias,
Authenticator = "identity-provider-redirector",
Requirement = "ALTERNATIVE",
}, new CustomResourceOptions
{
DependsOn =
{
executionOne,
},
});
var browserAuthenticationBinding = new Keycloak.Authentication.Bindings("browser_authentication_binding", new()
{
RealmId = realm.Id,
BrowserFlow = flow.Alias,
});
});
package main
import (
"github.com/pulumi/pulumi-keycloak/sdk/v6/go/keycloak"
"github.com/pulumi/pulumi-keycloak/sdk/v6/go/keycloak/authentication"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
realm, err := keycloak.NewRealm(ctx, "realm", &keycloak.RealmArgs{
Realm: pulumi.String("my-realm"),
Enabled: pulumi.Bool(true),
})
if err != nil {
return err
}
flow, err := authentication.NewFlow(ctx, "flow", &authentication.FlowArgs{
RealmId: realm.ID(),
Alias: pulumi.String("my-flow-alias"),
})
if err != nil {
return err
}
// first execution
executionOne, err := authentication.NewExecution(ctx, "execution_one", &authentication.ExecutionArgs{
RealmId: realm.ID(),
ParentFlowAlias: flow.Alias,
Authenticator: pulumi.String("auth-cookie"),
Requirement: pulumi.String("ALTERNATIVE"),
})
if err != nil {
return err
}
// second execution
_, err = authentication.NewExecution(ctx, "execution_two", &authentication.ExecutionArgs{
RealmId: realm.ID(),
ParentFlowAlias: flow.Alias,
Authenticator: pulumi.String("identity-provider-redirector"),
Requirement: pulumi.String("ALTERNATIVE"),
}, pulumi.DependsOn([]pulumi.Resource{
executionOne,
}))
if err != nil {
return err
}
_, err = authentication.NewBindings(ctx, "browser_authentication_binding", &authentication.BindingsArgs{
RealmId: realm.ID(),
BrowserFlow: flow.Alias,
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.keycloak.Realm;
import com.pulumi.keycloak.RealmArgs;
import com.pulumi.keycloak.authentication.Flow;
import com.pulumi.keycloak.authentication.FlowArgs;
import com.pulumi.keycloak.authentication.Execution;
import com.pulumi.keycloak.authentication.ExecutionArgs;
import com.pulumi.keycloak.authentication.Bindings;
import com.pulumi.keycloak.authentication.BindingsArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var realm = new Realm("realm", RealmArgs.builder()
.realm("my-realm")
.enabled(true)
.build());
var flow = new Flow("flow", FlowArgs.builder()
.realmId(realm.id())
.alias("my-flow-alias")
.build());
// first execution
var executionOne = new Execution("executionOne", ExecutionArgs.builder()
.realmId(realm.id())
.parentFlowAlias(flow.alias())
.authenticator("auth-cookie")
.requirement("ALTERNATIVE")
.build());
// second execution
var executionTwo = new Execution("executionTwo", ExecutionArgs.builder()
.realmId(realm.id())
.parentFlowAlias(flow.alias())
.authenticator("identity-provider-redirector")
.requirement("ALTERNATIVE")
.build(), CustomResourceOptions.builder()
.dependsOn(executionOne)
.build());
var browserAuthenticationBinding = new Bindings("browserAuthenticationBinding", BindingsArgs.builder()
.realmId(realm.id())
.browserFlow(flow.alias())
.build());
}
}
resources:
realm:
type: keycloak:Realm
properties:
realm: my-realm
enabled: true
flow:
type: keycloak:authentication:Flow
properties:
realmId: ${realm.id}
alias: my-flow-alias
# first execution
executionOne:
type: keycloak:authentication:Execution
name: execution_one
properties:
realmId: ${realm.id}
parentFlowAlias: ${flow.alias}
authenticator: auth-cookie
requirement: ALTERNATIVE
# second execution
executionTwo:
type: keycloak:authentication:Execution
name: execution_two
properties:
realmId: ${realm.id}
parentFlowAlias: ${flow.alias}
authenticator: identity-provider-redirector
requirement: ALTERNATIVE
options:
dependsOn:
- ${executionOne}
browserAuthenticationBinding:
type: keycloak:authentication:Bindings
name: browser_authentication_binding
properties:
realmId: ${realm.id}
browserFlow: ${flow.alias}
Properties
The alias of the flow to assign to the realm BrowserFlow.
The alias of the flow to assign to the realm ClientAuthenticationFlow.
The alias of the flow to assign to the realm DirectGrantFlow.
The alias of the flow to assign to the realm DockerAuthenticationFlow.
The alias of the flow to assign to the realm FirstBrokerLoginFlow (since Keycloak 24).
The alias of the flow to assign to the realm RegistrationFlow.
The alias of the flow to assign to the realm ResetCredentialsFlow.