博客
关于我
asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录
阅读量:505 次
发布时间:2019-03-06

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

前言

OAuth 2.0默认四种授权模式(GrantType)

  • 授权码模式(authorization_code)

本章主要介绍简化模式(implicit)

,不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

认证步骤

  • 客户端携带客户端标识以及重定向URI到授权服务器;
  • 用户确认是否要授权给客户端;
  • 授权服务器得到许可后,跳转到指定的重定向地址,并将令牌也包含在了里面;
  • 客户端不携带上次获取到的包含令牌的片段,去请求资源服务器;
  • 资源服务器会向浏览器返回一个脚本;
  • 浏览器会根据上一步返回的脚本,去提取在C步骤中获取到的令牌;
  • 浏览器将令牌推送给客户端。

配置认证授权服务器

Package

PM> Install-package IdentityServer4 -version 2.5.3

创建一个类Config(配置要保护的资源,和可以访问的API的客户端服务器)

public class Config    {        ///         ///     定义身份资源        ///         /// 
public static IEnumerable
GetIdentityResources() { return new List
{ new IdentityResources.OpenId(), new IdentityResources.Profile(), new IdentityResources.Email() }; } ///
/// 定义授权客户端 /// ///
public static IEnumerable
GetClients() { return new List
{ new Client{ ClientId="mvc", ClientName="MyClient", AllowedGrantTypes=GrantTypes.Implicit, RedirectUris = { "http://localhost:5003/signin-oidc" },//跳转登录到的客户端的地址 PostLogoutRedirectUris = { "http://localhost:5003/signout-callback-oidc" },//跳转登出到的客户端的地址 AllowedScopes = new List
{ IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile, IdentityServerConstants.StandardScopes.Email }, RequireConsent=false } }; } }
配置Startup

再走到ConfigureServices方法注入IdentityServer4服务

services.AddIdentityServer()                .AddDeveloperSigningCredential()                .AddInMemoryIdentityResources(Config.GetIdentityResources())                .AddInMemoryClients(Config.GetClients())                .AddTestUsers(TestUsers.Users);

在Configure方法中添加IdentityServer4服务中间件

app.UseIdentityServer();

新建客户端

配置Startup

再走到ConfigureServices方法注入IdentityServer4服务

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();            services.AddAuthentication(options =>            {                options.DefaultScheme = "Cookies";                options.DefaultChallengeScheme = "oidc";            })      .AddCookie("Cookies")      .AddOpenIdConnect("oidc", options =>      {          options.Authority = "http://localhost:5004";          options.RequireHttpsMetadata = false;          options.ClientId = "mvc";          options.SaveTokens = true;          options.GetClaimsFromUserInfoEndpoint = true;      });

在Configure方法中添加认证服务中间件

app.UseAuthentication();

Run

添加第三方快捷登录(github)

在授权服务器ConfigureServices注入

直接贴代码吧

public void ConfigureServices(IServiceCollection services)        {            services.AddMvc();            services.AddIdentityServer()                .AddDeveloperSigningCredential()                .AddInMemoryIdentityResources(Config.GetIdentityResources())                .AddInMemoryClients(Config.GetClients())                .AddTestUsers(TestUsers.Users);            services.AddAuthentication().AddGitHub(options =>            {                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;                options.ClientId = "your client";                options.ClientSecret = "your Secret";                         });        }

Run

登录成功后可以获取到声明的ClaimsIdentity

页面大家可以通过 进行下载

,或者通过命令dotnet new -i identityserver4.templates进行下载

github 可以到

注册完应用就会有应用编码和密钥了

概要

参考:

Demo:

转载地址:http://zshbz.baihongyu.com/

你可能感兴趣的文章
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理+负载均衡
查看>>
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>
Nginx 多端口配置和访问异常问题的排查与优化
查看>>
Nginx 如何代理转发传递真实 ip 地址?
查看>>
Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
查看>>
Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
查看>>
Nginx 学习(一):Nginx 下载和启动
查看>>
nginx 常用指令配置总结
查看>>
Nginx 常用配置清单
查看>>
nginx 常用配置记录
查看>>
nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
查看>>
Nginx 我们必须知道的那些事
查看>>
Nginx 源码完全注释(11)ngx_spinlock
查看>>
Nginx 的 proxy_pass 使用简介
查看>>
Nginx 的 SSL 模块安装
查看>>