美文网首页
Identity Server 4 学习(三)——创建简单的客户

Identity Server 4 学习(三)——创建简单的客户

作者: 寻找无名的特质 | 来源:发表于2021-11-07 06:15 被阅读0次

接下来可以创建客户端进行测试了,可以按照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

相关文章

网友评论

      本文标题:Identity Server 4 学习(三)——创建简单的客户

      本文链接:https://www.haomeiwen.com/subject/kfxkzltx.html