diff --git a/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj b/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj
index 46bd85c8d..8b23713ab 100644
--- a/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj
+++ b/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj
@@ -19,12 +19,14 @@
+
+
@@ -32,6 +34,7 @@
+
diff --git a/src/Infrastructure/BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs b/src/Infrastructure/BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs
index 1d36f597d..335015a20 100644
--- a/src/Infrastructure/BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs
+++ b/src/Infrastructure/BotSharp.OpenAPI/BotSharpOpenApiExtensions.cs
@@ -101,6 +101,21 @@ public static IServiceCollection AddBotSharpOpenAPI(this IServiceCollection serv
});
}
+ // Keycloak Identiy OAuth
+ if (!string.IsNullOrWhiteSpace(config["OAuth:Keycloak:ClientId"]) && !string.IsNullOrWhiteSpace(config["OAuth:Keycloak:ClientSecret"]))
+ {
+ builder = builder.AddKeycloak(options =>
+ {
+ options.BaseAddress = new Uri(config["OAuth:Keycloak:BaseAddress"]);
+ options.Realm = config["OAuth:Keycloak:Realm"];
+ options.ClientId = config["OAuth:Keycloak:ClientId"];
+ options.ClientSecret = config["OAuth:Keycloak:ClientSecret"];
+ options.AccessType = AspNet.Security.OAuth.Keycloak.KeycloakAuthenticationAccessType.Confidential;
+ int version = Convert.ToInt32(config["OAuth:Keycloak:Version"]??"22") ;
+ options.Version = new Version(version,0);
+ });
+ }
+
// Add services to the container.
services.AddControllers()
.AddJsonOptions(options =>
diff --git a/src/Infrastructure/BotSharp.OpenAPI/Controllers/UserController.cs b/src/Infrastructure/BotSharp.OpenAPI/Controllers/UserController.cs
index 65b7a46aa..e4201aa8c 100644
--- a/src/Infrastructure/BotSharp.OpenAPI/Controllers/UserController.cs
+++ b/src/Infrastructure/BotSharp.OpenAPI/Controllers/UserController.cs
@@ -36,9 +36,9 @@ public async Task> GetToken([FromHeader(Name = "Authorizatio
[AllowAnonymous]
[HttpGet("/sso/{provider}")]
- public async Task Authorize([FromRoute] string provider)
+ public async Task Authorize([FromRoute] string provider,string redirectUrl)
{
- return Challenge(new AuthenticationProperties { RedirectUri = $"page/user/me" }, provider);
+ return Challenge(new AuthenticationProperties { RedirectUri = redirectUrl }, provider);
}
[AllowAnonymous]
diff --git a/src/WebStarter/appsettings.json b/src/WebStarter/appsettings.json
index c040b4985..37907ff4c 100644
--- a/src/WebStarter/appsettings.json
+++ b/src/WebStarter/appsettings.json
@@ -21,6 +21,13 @@
"Google": {
"ClientId": "",
"ClientSecret": ""
+ },
+ "Keycloak": {
+ "BaseAddress": "",
+ "Realm": "",
+ "ClientId": "",
+ "ClientSecret": "",
+ "Version": 22
}
},