博客
关于我
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/

你可能感兴趣的文章
Node.js卸载超详细步骤(附图文讲解)
查看>>
Node.js基于Express框架搭建一个简单的注册登录Web功能
查看>>
node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
查看>>
Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
查看>>
Node.js安装及环境配置之Windows篇
查看>>
Node.js安装和入门 - 2行代码让你能够启动一个Server
查看>>
node.js安装方法
查看>>
Node.js官网无法正常访问时安装NodeJS的方法
查看>>
node.js模块、包
查看>>
node.js的express框架用法(一)
查看>>
Node.js的交互式解释器(REPL)
查看>>
Node.js的循环与异步问题
查看>>
Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
查看>>
nodejs + socket.io 同时使用http 和 https
查看>>
NodeJS @kubernetes/client-node连接到kubernetes集群的方法
查看>>
NodeJS API简介
查看>>
Nodejs express 获取url参数,post参数的三种方式
查看>>
nodejs http小爬虫
查看>>
nodejs libararies
查看>>
vue3+element-plus 项目中 el-switch 刷新后自动触发change?坑就藏在这里!
查看>>