diff --git a/test/Basic/Basic.csproj b/test/Basic/Basic.csproj
index 727545a..b872dee 100644
--- a/test/Basic/Basic.csproj
+++ b/test/Basic/Basic.csproj
@@ -8,6 +8,7 @@
+
diff --git a/test/Basic/Startup.cs b/test/Basic/Startup.cs
index 09536c3..64c9007 100644
--- a/test/Basic/Startup.cs
+++ b/test/Basic/Startup.cs
@@ -99,9 +99,14 @@ namespace Basic
app.UseSwagger(c =>
{
-
});
+ app.UseSwaggerUI(c =>
+ {
+ c.RoutePrefix = ""; // serve the UI at root
+ c.SwaggerEndpoint("/v1/api-docs", "V1 Docs");
+ c.SwaggerEndpoint("/gp/api-docs", "µÇ¼ģ¿é");
+ });
app.UseKnife4UI(c =>
{
//c.RoutePrefix = ""; // serve the UI at root
diff --git a/test/WebSites/OAuth2Integration/AuthServer/Controllers/AccountController.cs b/test/WebSites/OAuth2Integration/AuthServer/Controllers/AccountController.cs
index f276bbb..335eec8 100644
--- a/test/WebSites/OAuth2Integration/AuthServer/Controllers/AccountController.cs
+++ b/test/WebSites/OAuth2Integration/AuthServer/Controllers/AccountController.cs
@@ -4,6 +4,8 @@ using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using IdentityServer4;
using IdentityServer4.Test;
+using NCaptcha.Abstractions;
+using NCaptcha.AspNetCore.Extensions;
namespace OAuth2Integration.AuthServer.Controllers
{
@@ -26,8 +28,9 @@ namespace OAuth2Integration.AuthServer.Controllers
return View("/AuthServer/Views/Login.cshtml", viewModel);
}
+
[HttpPost("login")]
- public async Task Login([FromForm]LoginViewModel viewModel)
+ public async Task Login([FromForm] LoginViewModel viewModel)
{
if (!_userStore.ValidateCredentials(viewModel.Username, viewModel.Password))
{
@@ -43,6 +46,7 @@ namespace OAuth2Integration.AuthServer.Controllers
return Redirect(viewModel.ReturnUrl);
}
+
}
public class LoginViewModel
diff --git a/test/WebSites/OAuth2Integration/OAuth2Integration.csproj b/test/WebSites/OAuth2Integration/OAuth2Integration.csproj
index f370bf6..a2a2ce0 100644
--- a/test/WebSites/OAuth2Integration/OAuth2Integration.csproj
+++ b/test/WebSites/OAuth2Integration/OAuth2Integration.csproj
@@ -1,17 +1,19 @@
-
- netcoreapp3.0
-
+
+ netcoreapp3.0
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
diff --git a/test/WebSites/OAuth2Integration/ResourceServer/Controllers/CaptchaController.cs b/test/WebSites/OAuth2Integration/ResourceServer/Controllers/CaptchaController.cs
new file mode 100644
index 0000000..c3c19d9
--- /dev/null
+++ b/test/WebSites/OAuth2Integration/ResourceServer/Controllers/CaptchaController.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using NCaptcha.Abstractions;
+using NCaptcha.AspNetCore.Extensions;
+
+namespace OAuth2Integration.ResourceServer.Controllers
+{
+ [Route("captcha")]
+ public class CaptchaController : Controller
+ {
+ private readonly ICaptchaGenerator _captchaGenerator;
+
+ public CaptchaController(ICaptchaGenerator captchaGenerator)
+ {
+ _captchaGenerator = captchaGenerator;
+ }
+
+ [Produces("image/gif", Type = typeof(FileContentResult))]
+ [HttpGet]
+ public async Task OnGetCaptchaAsync() => await _captchaGenerator.GetCaptchaFileResultAsync();
+ }
+}
diff --git a/test/WebSites/OAuth2Integration/Startup.cs b/test/WebSites/OAuth2Integration/Startup.cs
index a6ba309..d5b5ca5 100644
--- a/test/WebSites/OAuth2Integration/Startup.cs
+++ b/test/WebSites/OAuth2Integration/Startup.cs
@@ -7,6 +7,9 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
+using NCaptcha.AspNetCore.SessionImages;
+using IGeekFan.AspNetCore.Knife4jUI;
+using Microsoft.AspNetCore.Mvc.Controllers;
namespace OAuth2Integration
{
@@ -50,6 +53,9 @@ namespace OAuth2Integration
services.AddControllersWithViews();
+ services.AddSession();
+ services.AddSessionBasedImageCaptcha();
+
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "Test API V1" });
@@ -73,6 +79,12 @@ namespace OAuth2Integration
}
});
+ c.CustomOperationIds(apiDesc =>
+ {
+ var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor;
+ return controllerAction.ControllerName + "-" + controllerAction.ActionName;
+ });
+
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
@@ -97,6 +109,8 @@ namespace OAuth2Integration
app.UseDeveloperExceptionPage();
}
+ app.UseSession();
+
app.Map("/auth-server", authServer =>
{
authServer.UseRouting();
@@ -126,8 +140,22 @@ namespace OAuth2Integration
});
resourceServer.UseSwagger();
+
+ app.UseKnife4UI(c =>
+ {
+ c.RoutePrefix = ""; //http://localhost:5000/index.html#/home
+ c.SwaggerEndpoint("/resource-server/swagger/v1/swagger.json", "My API V1");
+ c.EnableDeepLinking();
+ c.OAuthClientId("test-id");
+ c.OAuthClientSecret("test-secret");
+ c.OAuthAppName("test-app");
+ c.OAuthScopeSeparator(" ");
+ c.OAuthUsePkce();
+ });
+
resourceServer.UseSwaggerUI(c =>
{
+ //http://localhost:5000/resource-server/swagger/index.html
c.SwaggerEndpoint("/resource-server/swagger/v1/swagger.json", "My API V1");
c.EnableDeepLinking();