ASP.Net Identity + IODC 解析ReturnUrl

server/2025/1/18 8:56:25/

Identity + Ids4 配置 成认证服务

一、创建 Identity身份验证 项目

在这里插入图片描述
创建的项目结构中 没有 注册和登录的 控制器和视图
在这里插入图片描述

在这里插入图片描述

配置数据库地址
在这里插入图片描述
》》默认已经生成了Miagratin 直接update-database

二、在Identity项目 配置 IdentityServer4

Nuget 两个包

在这里插入图片描述
》》》配置Config 类

using Duende.IdentityServer.Models;
using Duende.IdentityServer.Test;
using Duende.IdentityServer;
using System.Security.Claims;namespace IdentityDemo
{public static class Config{/// <summary>/// api作用域/// </summary>/// public static IEnumerable<ApiScope> ApiScopes => new[]{new ApiScope{Name = "sample_api",DisplayName = "Sample API"}};// 这个 Authorization Server 保护了哪些 API (资源)public static IEnumerable<ApiResource> ApiResources(){return new[]{new ApiResource("api", "My API"){Scopes = { "api1scope", "api2scope" }}};}// 哪些客户端 Client(应用) 可以使用这个 Authorization Server/// <summary>/// 客户端/// </summary>public static IEnumerable<Client> ApiClients => new[]{new Client{//协议类型ProtocolType = "oidc",ClientName = "测试",ClientId = "zen",//定义客户端 Id  要唯一ClientSecrets = { new Secret("abc123zenabres89jijkomnlj".Sha256()) },//Client用来获取token// 混合模式AllowedGrantTypes = GrantTypes.Code,   // web程序客户端 RedirectUris = { "http://localhost:2004/signin-oidc"},PostLogoutRedirectUris = { "http://localhost:2004/signout-callback-oidc"},AllowedCorsOrigins = { "http://localhost:2004" },                    AllowedScopes = { //必须的IdentityServerConstants.StandardScopes.OpenId,//非必须IdentityServerConstants.StandardScopes.Profile,IdentityServerConstants.StandardScopes.Email,"sample_api" ,"offline_access"},//必须用户授权同意RequireConsent =true,AlwaysIncludeUserClaimsInIdToken =true,AllowOfflineAccess =true,RequirePkce =false,AccessTokenLifetime = 31536000,IdentityTokenLifetime = 300,},资源拥有者模式(又称密码模式)new Client{ClientId = "zen-password",//定义客户端 Id  要唯一ClientSecrets = { new Secret("abc123zenabres89jijkomnlj".Sha256()) },//Client用来获取tokenAllowedGrantTypes = GrantTypes.ResourceOwnerPassword,//可以关闭录入密码RequireClientSecret = false,AllowedScopes = {"sample_api" ,IdentityServerConstants.StandardScopes.OpenId,IdentityServerConstants .StandardScopes.Profile,}// 允许访问的 API 资源}};/// <summary>/// identityserver 提供的测试用的/// </summary>public static List<TestUser> Users => new List<TestUser>(){new TestUser{ //用户的唯一标识SubjectId="Zen001",Username = "Admin",Password = "123"}};/// <summary>/// 认证资源/// </summary>public static IEnumerable<IdentityResource> IdentityResources =>new List<IdentityResource>{new IdentityResources.OpenId(),new IdentityResources.Profile(),new IdentityResources.Email(),};}
}

》》》Program

在这里插入图片描述
在这里插入图片描述

using IdentityDemo.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;namespace IdentityDemo
{public class Program{public static void Main(string[] args){var builder = WebApplication.CreateBuilder(args);// Add services to the container.var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");builder.Services.AddDbContext<ApplicationDbContext>(options =>options.UseSqlServer(connectionString));builder.Services.AddDatabaseDeveloperPageExceptionFilter();builder.Services.AddDefaultIdentity<IdentityUser>(options =>{options.SignIn.RequireConfirmedAccount = false;options.Password.RequireNonAlphanumeric = false;options.Password.RequireDigit = false;options.Password.RequireLowercase = false;options.Password.RequiredLength = 3;}).AddEntityFrameworkStores<ApplicationDbContext>();builder.Services.AddControllersWithViews();builder.Services.AddIdentityServer(options=>{//因Identity登录地址和Ids4 默认不一致 需要重新定义// ids4  默认  是  /Account/Loginoptions.UserInteraction.LoginUrl = @"/Identity/Account/Login";}).AddDeveloperSigningCredential().AddInMemoryApiScopes(Config.ApiScopes).AddInMemoryIdentityResources(Config.IdentityResources).AddTestUsers(Config.Users)             .AddInMemoryClients(Config.ApiClients);var app = builder.Build();// Configure the HTTP request pipeline.if (app.Environment.IsDevelopment()){app.UseMigrationsEndPoint();}else{app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.UseIdentityServer();app.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");app.MapRazorPages();app.Run();}}
}

三、客户端 配置Ids4

》》Program中

using Duende.IdentityModel;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using System.IdentityModel.Tokens.Jwt;namespace WebApp
{public class Program{public static void Main(string[] args){var builder = WebApplication.CreateBuilder(args);#region Ids4//禁止JWT身份映射JwtSecurityTokenHandler.DefaultMapInboundClaims = false;builder.Services.AddAuthentication(options =>{//两套认证方案  先 第一个,不行在 第二个options.DefaultScheme = "Cookies";options.DefaultChallengeScheme = "oidc";})// options.DefaultScheme = "Cookies"; 要跟这个名称保持一致.AddCookie("Cookies")//options.DefaultChallengeScheme = "oidc"; 要跟这个名称保持一致.AddOpenIdConnect(authenticationScheme: "oidc", options =>{#region oidc 相关options.Authority = "https://localhost:5053/";options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;options.RequireHttpsMetadata = true;options.ClientId = "zen";options.ClientSecret = "abc123zenabres89jijkomnlj";options.ResponseType = OpenIdConnectResponseType.Code;options.GetClaimsFromUserInfoEndpoint = true;options.UsePkce = false;options.SaveTokens = true;#endregion#region 需要授权信息options.Scope.Add("sample_api");options.Scope.Add("offline_access");#endregionoptions.Events = new Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectEvents(){OnRemoteFailure = context => {//跳转到错误引导页context.Response.Redirect("xxx");context.HandleResponse();return Task.CompletedTask;}//OnAccessDenied//OnRemoteSignOut};});# endregion// Add services to the container.builder.Services.AddControllersWithViews();var app = builder.Build();// Configure the HTTP request pipeline.if (!app.Environment.IsDevelopment()){app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");app.Run();}}
}

解析 ReturnUrl

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/server/159312.html

相关文章

鸿蒙Flutter实战:16-无痛开发指南(适合新手)

本文讲述如何通过 Flutter 开发鸿蒙原生应用。整个过程结合往期文章、实战经验、流程优化&#xff0c;体验丝滑、无痛。 无痛搭建开发环境 为了减少疼痛&#xff0c;这里使用全局唯一的 Flutter 版本开发。高阶用法可以参看往期同系列文章。 硬件准备 一台 Mac&#xff0c;一部…

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题&#xff1a;当设置dialog中有el-table时&#xff0c;并设置el-table区域的滚动&#xff0c;看到el-table中多了一条横线&#xff1b; 原因&#xff1a;el-table有一个before的伪元素作为表格的下边框下&#xff0c;初始的时候已设置&#xff0c;在滚动的时候并没有重新设置…

BGP边界网关协议(Border Gateway Protocol)概念、邻居建立

一、定义 主要用于交换AS之间的可达路由信息&#xff0c;构建AS域间的传播路径&#xff0c;防止路由环路的产生&#xff0c;并在AS级别应用一些路由策略。当前使用的版本是BGP-4。 二、环境 底层以OSPF进行igp互联互通&#xff0c;上层使用BGP协议。 三、基本原理 1、BGP是一…

unity学习16:unity里向量的计算,一些方法等

目录 1 unity里的向量&#xff1a; 2 向量加法 2.1 向量加法的几何意义 2.2向量加法的标量算法 3 向量减法 3.1 向量减法的几何意义 3.2 向量减法的标量算法 4 向量的标量乘法 5 向量之间的乘法要注意是左乘 还是右乘 5.1 注意区别 5.2 向量&#xff0c;矩阵&#x…

Unity3D BEPUphysicsint定点数3D物理引擎使用详解

前言 Unity3D作为一款强大的游戏开发引擎&#xff0c;提供了丰富的功能和工具&#xff0c;助力开发者轻松创建多样化的游戏。而在游戏开发中&#xff0c;物理引擎的作用不可忽视。BEPUphysicsint是一个基于Unity3D的开源3D物理引擎项目&#xff0c;它通过采用定点数计算来实现…

Oracle报错ORA-01078、LRM-00109

虚拟机异常关机后&#xff0c;rac数据库备机无法启动数据库&#xff0c;报错如下 解决方法&#xff1a; 找到如下路径文件 执行&#xff1a; cp init.ora.016202516818 /u01/app/oracle/product/19.3.0/db/dbs/ mv init.ora.016202516818 initplm2.ora 再次进入命令行sqlpl…

【深度学习】用RML2018训练好模型去识别RML2016的数据会遇到输入维度不匹配的问题,如何解决?

文章目录 问题解决办法1. 调整输入数据长度2. 修改模型结构(我个人比较推崇的方法)3. 迁移学习4. 重新训练模型5. 数据增强6. 其他差异问题 经常会有人问的一个问题: 我用RML2018跑的调制识别模型,用RML2016数据集能直接识别吗?(2018数据集信号样本的长度是1024,2016数据集…

常用的UI自动化测试框架是哪些?有什么优缺点?如何选择?

以下是对几种常用UI自动化测试框架&#xff08;Selenium、Appium、Cypress&#xff09;的优缺点分析及选择建议&#xff1a; 测试框架优点缺点示例语言Selenium跨浏览器兼容&#xff0c;多语言支持&#xff0c;社区资源丰富&#xff0c;成熟度高速度慢&#xff0c;需外部驱动&…