IdentityServer4 使用OpenID Connect添加用户身份验证

使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证。客户端调用,实现授权。

IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍。IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API 。

本文环境:IdentityServer4 1.0  .NET Core 1.0.1

下面正式开始。

 

新建IdentityServer4服务端

服务端也就是提供服务,如QQ Weibo等。

新建一个ASP.NET Core Web Application 项目IdentityServer4OpenID,选择模板Web 应用程序 不进行身份验证。

删除模板创建的Controllers 文件以及Views 文件夹。

添加IdentityServer4 引用:

Install-Package IdentityServer4

然后添加配置类Config.cs:

public class Config

    {

        //定义系统中的资源

        public static IEnumerable<IdentityResource> GetIdentityResources()

        {

            return new List<IdentityResource>

            {

                new IdentityResources.OpenId(),

                new IdentityResources.Profile(),

            };

        }


        public static IEnumerable<Client> GetClients()

        {

            // 客户端凭据

            return new List<Client>

            {

                // OpenID Connect implicit 客户端 (MVC)

                new Client

                {

                    ClientId = "mvc",

                    ClientName = "MVC Client",

                    AllowedGrantTypes = GrantTypes.Implicit,


                    RedirectUris = { "http://localhost:5002/signin-oidc" },

                    PostLogoutRedirectUris = { "http://localhost:5002" },

                    //运行访问的资源

                    AllowedScopes =

                    {

                        IdentityServerConstants.StandardScopes.OpenId,

                        IdentityServerConstants.StandardScopes.Profile

                    }

                }

            };

        }


        //测试用户

        public static List<TestUser> GetUsers()

        {

            return new List<TestUser>

            {

                new TestUser

                {

                    SubjectId = "1",

                    Username = "admin",

                    Password = "123456",


                    Claims = new List<Claim>

                    {

                        new Claim("name", "admin"),

                        new Claim("website", "https://www.cnblogs.com/linezero")

                    }

                },

                new TestUser

                {

                    SubjectId = "2",

                    Username = "linezero",

                    Password = "123456",


                    Claims = new List<Claim>

                    {

                        new Claim("name", "linezero"),

                        new Claim("website", "https://github.com/linezero")

                    }

                }

            };

        }

    }

以上使用IdentityServer4测试数据类添加数据,直接存在内存中。IdentityServer4 是支持持久化。

然后打开Startup.cs 加入如下:

public void ConfigureServices(IServiceCollection services)

        {

            // Add framework services.

            services.AddMvc();

            services.AddIdentityServer()

                .AddTemporarySigningCredential()

                .AddInMemoryIdentityResources(Config.GetIdentityResources())

                .AddInMemoryClients(Config.GetClients())

                .AddTestUsers(Config.GetUsers());

        }


       public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

        {

            ...

            app.UseIdentityServer();

            ...

接着安装UI,UI部分也可以自己编写,也就是登录 注销 允许和错误。

可以到 https://github.com/IdentityServer/IdentityServer4.Quickstart.UI/tree/release 下载,然后解压到项目目录下。

也可以使用命令提示符快速安装:

powershell iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/IdentityServer/IdentityServer4.Quickstart.UI/release/get.ps1'))

在项目目录下打开命令提示符,输入以上命令。

更多信息,可以查看官方readme:https://github.com/IdentityServer/IdentityServer4.Quickstart.UI/blob/release/README.md

 

新建MVC客户端

接着新建一个MVC客户端,可以理解为你自己的应用,需要使用第三方提供的服务。

新建一个ASP.NET Core Web Application 项目MvcClient,选择模板Web 应用程序 不进行身份验证。

配置Url 绑定5002端口 UseUrls("http://localhost:5002")

然后添加引用:

Install-Package Microsoft.AspNetCore.Authentication.Cookies

Install-Package Microsoft.AspNetCore.Authentication.OpenIdConnect

本文最终所引用的为1.1 。

接着打开Startup类,在Configure方法中添加如下代码:

app.UseCookieAuthentication(new CookieAuthenticationOptions

            {

                AuthenticationScheme = "Cookies"

            });


            app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions

            {

                AuthenticationScheme = "oidc",

                SignInScheme = "Cookies",


                Authority = "http://localhost:5000",

                RequireHttpsMetadata = false,


                ClientId = "mvc",

                SaveTokens = true

            });

然后在HomeController 加上[Authorize] 特性,HomeController是VS2015 模板创建的,如没有可以自行创建。

然后更改Home文件夹下的Index视图如下:

<dl>

    @foreach (var claim in User.Claims)

    {

        <dt>@claim.Type</dt>

        <dd>@claim.Value</dd>

    }

</dl>

运行

首先运行服务端,定位到项目目录下dotnet run,运行起服务端以后,访问http://localhost:5000 ,确认是否正常访问。

能正常访问接着运行客户端,同样是dotnet run ,然后访问http://localhost:5002,会默认跳转至http://localhost:5000 ,这样也就对了。

最终效果如下:

 

这里UI部分就是官方UI,我们也可以自行设计应用到自己的系统中。登录的用户是配置的测试用户,授权以后可以看到配置的Claims。

本文所采用的 Grant 为 Implicit,更为详细的OAuth 2.0 https://tools.ietf.org/html/rfc6749 。

 

示例GitHub:https://github.com/linezero/Blog/tree/master/IdentityServer4OpenID

参考官方文档:https://identityserver4.readthedocs.io/en/release/quickstarts/3_interactive_login.html

原文地址: http://www.cnblogs.com/linezero/p/identityserver4openidconnect.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度优先搜索和广度优先搜索

转载自 深度优先搜索和广度优先搜索 图的应用很广泛&#xff0c;也有很多非常有用的算法&#xff0c;当然也有很多待解决的问题&#xff0c;根据性质&#xff0c;图可以分为无向图和有向图。 图 之所以要研究图&#xff0c;是因为图在生活中应用比较广泛&#xff1a; 图是若…

集成Springboot----ElasticSearch

集成Springboot 官方文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7WO11AQr-1610955801732)(C:\Users\王东梁\AppData\Roaming\Typora\typo…

消息队列 Kafka 的基本知识及 .NET Core 客户端

前言 最新项目中要用到消息队列来做消息的传输&#xff0c;之所以选着 Kafka 是因为要配合其他 java 项目中&#xff0c;所以就对 Kafka 了解了一下&#xff0c;也算是做个笔记吧。 本篇不谈论 Kafka 和其他的一些消息队列的区别&#xff0c;包括性能及其使用方式。 简介 Kafka…

javaWeb服务详解【客户端调用】(含源代码,测试通过,注释) ——applicationContext.xml

<?xml version"1.0" encoding"UTF-8"?> <beansxmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"xs…

深入解读Service Mesh背后的技术细节

转载自 深入解读Service Mesh背后的技术细节 在Kubernetes称为容器编排的标准之后&#xff0c;Service Mesh开始火了起来&#xff0c;但是很多文章讲概念的多&#xff0c;讲技术细节的少&#xff0c;所以专门写一篇文章&#xff0c;来解析Service Mesh背后的技术细节。 一、…

CentOS7查看和关闭防火墙

https://blog.csdn.net/ytangdigl/article/details/79796961 CentOS7查看和关闭防火墙 蔚蓝色天空sky 2018-04-02 23:22:21 708762 收藏 236 分类专栏&#xff1a; linux 文章标签&#xff1a; centos 防火墙 CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态 f…

Visual Studio Code 1.8版本添加了Hot Exit、Zen Mode及更多调试选项

最新发布的Visual Studio Code 1.8版本有许多改进和新功能&#xff0c;包括防止丢失任何编辑信息的Hot Exit&#xff0c;方便开发人员把注意力集中在代码上的Zen Mode&#xff0c;新的调试功能以及更方便的设置等。 Hot Exit是一项新功能&#xff0c;目的是在应用程序崩溃或退出…

javaWeb服务详解【客户端调用】(含源代码,测试通过,注释) ——测试

Dept测试 Testpublic void test() {ApplicationContext ctx new ClassPathXmlApplicationContext("applicationContext.xml");IDeptService deptService (IDeptService) ctx.getBean("wsClient");List<Dept> depts deptService.getDepts();for (D…

ElasticSearch(笔记)

简介 本教程基于ElasticSearch7.6.1, 注意ES7的语法与ES6的API调用差别很大, 教程发布时最新版本为ES7.6.2(20200401更新);ES是用于全文搜索的工具: SQL: 使用like %关键词%来进行模糊搜索在大数据情况下是非常慢的, 即便设置索引提升也有限;ElasticSearch: 搜索引擎(baidu, …

漫画:什么是冒泡排序

转载自 漫画&#xff1a;什么是冒泡排序 什么是冒泡排序&#xff1f; 冒泡排序的英文Bubble Sort&#xff0c;是一种最基础的交换排序。 大家一定都喝过汽水&#xff0c;汽水中常常有许多小小的气泡&#xff0c;哗啦哗啦飘到上面来。这是因为组成小气泡的二氧化碳比水要轻…

CentOS - 修改主机名教程(将 localhost.localdomain 改成其它名字)

https://www.cnblogs.com/gudi/p/7846978.html 需要关闭防火墙&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; Linux修改主机名称 碰到这个问题的时候&#xff0c;是在安装Zookeeper集群的时候&#xff0c;碰到如下问题 java.net.U…

使用JDBCTemplate实现与Spring结合,方法公用

该篇博文主要是体现了接口和类的公用性&#xff0c; Emp的实体类&#xff1a; package org.entity;import java.util.Date;/*** Emp entity. author MyEclipse Persistence Tools*/public class Emp implements java.io.Serializable {// Fieldsprivate Integer empno;private…

.net core 源码解析-web app是如何启动并接收处理请求(二) kestrel的启动

上篇讲到.net core web app是如何启动并接受请求的&#xff0c;下面接着探索kestrel server是如何完成此任务的。 1.kestrel server的入口KestrelServer.Start (Microsoft.AspNetCore.Hosting.Server.IHttpApplication ) FrameFactory创建的frame实例最终会交给libuv的loop回调…

MySQL中的any_value()函数

https://blog.csdn.net/u014079773/article/details/93722761 https://www.thinbug.com/q/37089347 https://blog.csdn.net/Peacock__/article/details/90608246 https://www.itranslater.com/qa/details/2109775246877262848 4.any_value()会选择被分到同一组的数据里…

MybatisPlus使用

Mybatisplus 导入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</gro…

面试为什么需要了解JVM

转载自 面试为什么需要了解JVM 说在前面 如果你经常注意面试题&#xff0c;你会发现现在面试题多多少少会含有jvm相关的面试题&#xff0c;那么为什么现在面试需要了解或者问面试题呢&#xff1f; 主题 谈谈自己的理解&#xff0c;概括为以下几个方面&#xff1a; 的确很重…

使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)

/** * Title: BaseDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-6-3 下午2:40:13 * version V1.0 */ package org.dao;import java.io.Serializable; import java.util.List;/** * …

Centos7安装apt-get 在centos下用yum install xxx        不是使用apt-get

https://www.cnblogs.com/yadongliang/p/8660046.html centos中执行apt-get命令提示apt-get command not found 先说结论: 在centos下用yum install xxx 不是使用apt-getyum和apt-get的区别: 一般来说著名的linux系统基本上分两大类&#xff1a; RedHat系列&#xf…

.net core 源码解析-mvc route的注册,激活,调用流程(三)

.net core mvc route的注册&#xff0c;激活&#xff0c;调用流程 mvc的入口是route&#xff0c;当前请求的url匹配到合适的route之后&#xff0c;mvc根据route所指定的controller和action激活controller并调用action完成mvc的处理流程。下面我们看看服务器是如何调用route的。…

高可用性的几个级别

转载自 高可用性的几个级别 大家常说高可用&#xff0c;High Availablility&#xff0c;但是一般说到这个词的时候&#xff0c;具体指的什么方案呢&#xff1f; 级别一&#xff1a;FT (Fault Tolerance) 双击热备 通过创建与主实例保持虚拟同步的虚拟机&#xff0c;使应用在服…