接下来可以创建客户端进行测试了,可以按照Identity Server 4的官方教程进行:https://identityserver4.readthedocs.io/en/latest/quickstarts/2_interactive_aspnetcore.html。由于我们以及创建了服务端,所以这里只需要创建客户端。
首先创建一个asp.net core web项目,无身份认证。然后增加包:
Microsoft.AspNetCore.Authentication.OpenIdConnect
接下来,改造lanuchsettings.json,去掉IIS Express的设置:
{
"profiles":{
"MyClientWeb": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"applicationUrl": "http://localhost:5005",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
这个网站的端口是5005。然后在StartUp中进行修改,首先修改ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "https://localhost:44310";// "https://localhost:5001";
options.ClientId = "mvc client";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.SaveTokens = true;
});
}
这里的代码照抄教程,只是将Authority的端口改为我们使用的认证服务器端口44310。
然后修改Configure函数:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages()
.RequireAuthorization();
});
}
增加了app.UseAuthorization(); endpoints后增加了RequireAuthorization()。访问任何页面都需要认证。
接下来改造Index.cshtml,显示登录信息:
@page
@using Microsoft.AspNetCore.Authentication
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<h2>Claims</h2>
<dl>
@foreach (var claim in User.Claims)
{
<dt>@claim.Type</dt>
<dd>@claim.Value</dd>
}
</dl>
<h2>Properties</h2>
<dl>
@foreach (var prop in (await HttpContext.AuthenticateAsync()).Properties.Items)
{
<dt>@prop.Key</dt>
<dd>@prop.Value</dd>
}
</dl>
代码与教程有点不同,由于我使用的是RazorPage,不是MVC,所以环境变量是HttpContext。
客户端构建完成后,需要在认证服务器中增加这个客户端的信息,
图片.png
在Basic页面中配置Scopes、Redirect Uris、Secrets等,需要与Client的代码一致:
图片.png
网友评论