博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IdentityServer4 使用OpenID Connect添加用户身份验证
阅读量:5858 次
发布时间:2019-06-19

本文共 4654 字,大约阅读时间需要 15 分钟。

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

IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍。 。

本文环境: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
GetIdentityResources() { return new List
{ new IdentityResources.OpenId(), new IdentityResources.Profile(), }; } public static IEnumerable
GetClients() { // 客户端凭据 return new List
{ // 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
GetUsers() { return new List
{ new TestUser { SubjectId = "1", Username = "admin", Password = "123456", Claims = new List
{ new Claim("name", "admin"), new Claim("website", "https://www.cnblogs.com/linezero") } }, new TestUser { SubjectId = "2", Username = "linezero", Password = "123456", Claims = new List
{ 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视图如下:

@foreach (var claim in User.Claims) {
@claim.Type
@claim.Value
}

 

运行

首先运行服务端,定位到项目目录下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://identityserver4.readthedocs.io/en/release/quickstarts/3_interactive_login.html

 

如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

你可能感兴趣的文章
python-20:爬取糗事百科段子源码
查看>>
通过qq通信原理
查看>>
我的友情链接
查看>>
免安装版tomcat启动startup.bat闪退问题
查看>>
Linux下架设CS1.6服务器
查看>>
超酷的时间选择控件
查看>>
oracle中scott/tiger、sys、SYSDBA、system都是什么用
查看>>
Deprecated:split()
查看>>
react学习之es6小结
查看>>
设置更改root密码(远程,本地)、连接mysql、mysql常用命令
查看>>
企业员工电脑如何加入域?
查看>>
字节序和大小端
查看>>
nginx 日志切割
查看>>
使用py-kms搭建KMS服务器
查看>>
使用Windows PowerShell查看系统信硬件信息-1
查看>>
我的友情链接
查看>>
ERP二次开发项目交付
查看>>
笔记本显示屏幕左右 有黑边【解决办法】
查看>>
iOS接入微信登录可能遇到的问题
查看>>
重装系统,如何备份itune 文件
查看>>