本文共 3643 字,大约阅读时间需要 12 分钟。
前言
OAuth 2.0默认四种授权模式(GrantType)
本章主要介绍简化模式(implicit)
,不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。认证步骤
配置认证授权服务器
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 } }; } }
再走到ConfigureServices方法注入IdentityServer4服务
services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryIdentityResources(Config.GetIdentityResources()) .AddInMemoryClients(Config.GetClients()) .AddTestUsers(TestUsers.Users);
在Configure方法中添加IdentityServer4服务中间件
app.UseIdentityServer();
新建客户端
再走到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/