zoukankan      html  css  js  c++  java
  • IdentityServer4(四)

    本文介绍Asp.Net Core MVC项目,连接IdentityServer4项目实现授权登录。

    1、新建IdentityServer4项目,选择In-Memory项目模板。

    2、将launchSetting.json修改URL,http://localhost:5001

     

     3、修改Startup文件

     public class Startup
        {
            public IWebHostEnvironment Environment { get; }
            public IConfiguration Configuration { get; }
    
            public Startup(IWebHostEnvironment environment, IConfiguration configuration)
            {
                Environment = environment;
                Configuration = configuration;
            }
    
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllersWithViews();
    
                var builder = services.AddIdentityServer()
               .AddInMemoryIdentityResources(Config.IdentityResources)
               .AddInMemoryApiScopes(Config.ApiScopes)
               .AddInMemoryClients(Config.Clients)
               .AddTestUsers(TestUsers.Users);
                // not recommended for production - you need to store your key material somewhere secure
                builder.AddDeveloperSigningCredential();
    
                services.AddAuthentication(options =>
                {
                    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                }).AddCookie("Cookies");
            }
    
            public void Configure(IApplicationBuilder app)
            {
                if (Environment.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseStaticFiles();
    
                app.UseRouting();
                app.UseIdentityServer();
                app.UseAuthentication();
                app.UseAuthorization();
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapDefaultControllerRoute();
                });
            }
        }

    4、修改Config文件

     public static class Config
        {
            public static IEnumerable<IdentityResource> IdentityResources =>
                new IdentityResource[]
                {
                    new IdentityResources.OpenId(),
                    new IdentityResources.Profile(),
                };
    
            public static IEnumerable<ApiScope> ApiScopes =>
                new ApiScope[]
                {
                    new ApiScope("scope1"),
                    new ApiScope("scope2"),
                };
    
            public static IEnumerable<Client> Clients =>
                new Client[]
                {
                    // m2m client credentials flow client
                    new Client
                    {
                        ClientId = "m2m.client",
                        ClientName = "Client Credentials Client",
    
                        AllowedGrantTypes = GrantTypes.ClientCredentials,
                        ClientSecrets = { new Secret("511536EF-F270-4058-80CA-1C89C192F69A".Sha256()) },
    
                        AllowedScopes = { "scope1" }
                    },
    
                    // interactive client using code flow + pkce
                    new Client
                    {
                        ClientId = "interactive",
                        ClientSecrets = { new Secret("49C1A7E1-0C79-4A89-A3D6-A37998FB86B0".Sha256()) },
    
                        AllowedGrantTypes = GrantTypes.Code,
    
                        RedirectUris = { "https://localhost:44300/signin-oidc" },
                        FrontChannelLogoutUri = "https://localhost:44300/signout-oidc",
                        PostLogoutRedirectUris = { "https://localhost:44300/signout-callback-oidc" },
    
                        AllowOfflineAccess = true,
                        AllowedScopes = { "openid", "profile", "scope2" }
                    },
    
                     new Client
                    {
                        ClientId = "mvc",
                        ClientSecrets = { new Secret("secret".Sha256()) },
                    
                        AllowedGrantTypes = GrantTypes.Code,
                    
                        // where to redirect to after login
                        RedirectUris = { "http://localhost:5002/signin-oidc" },
                    
                        // where to redirect to after logout
                        PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
                    
                        AllowedScopes = new List<string>
                        {
                            IdentityServerConstants.StandardScopes.OpenId,
                            IdentityServerConstants.StandardScopes.Profile
                        }
                    }
                };
        }

    5、创建mvc项目

    6、Nuget 搜索 Microsoft.AspNetCore.Authentication.OpenIdConnect 安装包

    7、修改Startup文件

      public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllersWithViews();
                JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
    
                services.AddAuthentication(options =>
                {
                    options.DefaultScheme = "Cookies";
                    options.DefaultChallengeScheme = "oidc";
                })
                    .AddCookie("Cookies")
                    .AddOpenIdConnect("oidc", options =>
                    {
                        options.Authority = "http://localhost:5001";
                        options.RequireHttpsMetadata = false;
                        options.ClientId = "mvc";
                        options.ClientSecret = "secret";
                        options.ResponseType = "code";
    
                        options.SaveTokens = true;
                    });
    
                services.Configure<CookiePolicyOptions>(options =>
                {
                    options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
                    options.OnAppendCookie = cookieContext =>
                        SetSameSite(cookieContext.Context, cookieContext.CookieOptions);
                    options.OnDeleteCookie = cookieContext =>
                        SetSameSite(cookieContext.Context, cookieContext.CookieOptions);
                });
            }
    
            public void SetSameSite(HttpContext httpContext, CookieOptions options)
            {
                if (options.SameSite == SameSiteMode.None)
                {
                    if (httpContext.Request.Scheme != "https")
                    {
                        options.SameSite = SameSiteMode.Unspecified; 
                    }
                }
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                }
    
                //使用Cookie决策
                app.UseCookiePolicy();
    
                app.UseStaticFiles();
    
                app.UseRouting();
    
                app.UseAuthentication();
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapDefaultControllerRoute()
                        .RequireAuthorization();
                });
            }
        }

    8、打开MVC项目目录,bindebug et5.0 目录下,运行cmd命令窗口

    输入   dotnet IdsClientOne.dll --urls "http://localhost:5002"

    回车 启动mvc客户端  输入账号bob 密码bob,登录验证成功后跳转至客户端index页面

  • 相关阅读:
    【写一个自己的js库】 5.添加修改样式的方法
    【写一个自己的js库】 4.完善跨浏览器事件操作
    js跑马灯效果
    jquery hover延时
    chart
    【写一个自己的js库】 3.添加几个处理字符串的方法
    【写一个自己的js库】 2.实现自己的调试日志
    django踩坑记录
    单元测试框架unittest-3
    单元测试框架unittest-2
  • 原文地址:https://www.cnblogs.com/lhwpc/p/15066796.html
Copyright © 2011-2022 走看看