ASP.Net Identity + IODC 解析ReturnUrl

news/2025/1/18 6:06:09/

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/news/1564068.html

相关文章

DX12 快速教程(3) —— 画矩形

快速导航 新建项目 "003-DrawRectangle"初识渲染管线什么是渲染管线可编程渲染管线与着色器渲染管线五大阶段Input Assembler (IA) Stage 输入装配阶段Vertex Shader (VS) Stage 顶点着色器阶段什么是齐次坐标透视与齐次坐标六大坐标空间顶点着色器的目标 Rasterizat…

《深度学习神经网络训练:数据集下载资源列表》

深度学习神经网络训练&#xff1a;数据集下载资源列表 一、数据集下载的重要性 在当今数字化时代&#xff0c;数据集下载对于各个领域的研究与发展都具有不可忽视的重要意义。尤其在机器学习、深度学习以及各类数据驱动的科研项目中&#xff0c;数据集更是起到了基础性的支撑…

JVM 触发类加载的条件有哪些?

目录 一、类加载生命周期 二、主动引用 2.1、创建类的实例 2.2、访问类的静态字段或静态方法 2.3、反射 2.4、初始化类的子类时&#xff0c;先初始化父类 2.5、虚拟机启动时&#xff0c;初始化 main 方法所在的类 2.6、动态语言支持 三、被动引用 3.1、通过子类引用父…

Hibernate框架:简化数据持久化的强大工具

在软件开发领域&#xff0c;数据持久化是一个核心问题&#xff0c;它关乎应用程序如何高效、安全地存储和检索数据。Hibernate&#xff0c;作为一款开源的对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;自其诞生以来&#xff0c;便以其强大的功能和灵活的架构赢得了…

HTTP 与 SSH 在 Git 中的区别与选择指南

git 使用 HTTP 和 SSH 两种协议与远程仓库进行交互,每种协议都有其特点、优缺点和使用场景。 1. 认证方式 HTTP: 通过 用户名 和 密码 进行身份验证,通常是 GitHub 的用户名和密码。近年来,GitHub 不再支持使用用户名和密码进行身份验证,而是要求使用 个人访问令牌(PAT,…

Android 对接口的封装使用

前言 本篇文章主要是记录Android代码 对java 接口的封装和使用方法&#xff0c;比较基础&#xff0c;记录一下&#xff0c;阅读本篇文章前&#xff0c;请移步 java基础系列(九) 接口和抽象类 这篇文章。 接口理解 从设计角度: 设计方面的区别 抽象类是对一种事物的抽象&#…

【开源免费】基于Vue和SpringBoot的人口老龄化社区服务与管理平台(附论文)

本文项目编号 T 140 &#xff0c;文末自助获取源码 \color{red}{T140&#xff0c;文末自助获取源码} T140&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

onlyoffice编辑服务部署

下载官方镜像 下载onlyoffice_7.4.1.tar.gz镜像包 安装官方镜像 上传镜像包后执行 docker load -i onlyoffice_7.4.1.tar.gz 将镜像部署到本地仓库 下载onlyoffice编辑服务包 下载onlyoffice.zip包 启动onlyoffice编辑服务 上传包至服务器&#xff0c;解压包&#xff0c;…