IdentityServer就是一套Framework,實現了OAuth的受權html
理解OAuth流程,學會怎麼使用他web
http://ruanyifeng.com/blog/2014/05/oauth_2_0.htmlapi
客戶端模式(client credentials)微信
客戶端模式,在使用微信支付或者支付寶支付的時候,會使用這種模式session
簡單的實現一個IdentityServermvc
在個人電腦D:\MyDemos\jesse\下建立文件夾IdentityServerSampleapp
D:\MyDemos\jesse\IdentityServerSampleide
而後在這個文件夾下面打開dos窗體。建立webapi的項目post
dotnet new webapi --name IdentityServerCenter微信支付
D:\MyDemos\jesse\IdentityServerSample\IdentityServerCenter
視頻上用VScode打開的。 我仍是用VS2017打開吧
Nuget安裝包:IdentityServer4
在MVC之前添加service配置
引入命名空間 using IdentityServer4;
配置添加到依賴注入裏面
services.AddIdentityServer()
.AddDeveloperSigningCredential();
添加完依賴注入之後,要使用這個Identity
//app.UseMvc();//這裏咱們暫時用不到MVC。這裏先註釋掉 app.UseIdentityServer();
而後咱們在Program.cs裏面
設置啓動地方爲5000端口
.UseUrls("http://localhost:5000")
在根目錄下建立 Config.cs文件
這個類是咱們暫時用來初始化IdentityServer的
類裏面咱們會寫一些靜態方法
這裏返回一個Resource
接下來定義Client客戶端
在給一個能夠訪問Resource,就是這個Client呢能夠訪問咱們那些Resource
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using IdentityServer4.Models; namespace IdentityServerCenter { public class Config { public static IEnumerable<ApiResource> GetResource() { return new List<ApiResource> { new ApiResource("api","My Api") }; } public static IEnumerable<Client> GetClients() { return new List<Client>() { new Client() { ClientId="client", AllowedGrantTypes=GrantTypes.ClientCredentials,//最簡單的模式 ClientSecrets={ new Secret("secret".Sha256()) }, AllowedScopes={ "api"} } }; } } }
把咱們的ApiResoure加入進來
這裏我先都註釋掉
這裏沒有添加mvc的管道也沒有添加webapi
webapi和mvc實際上一個管道。
打開地址,什麼也看不到
http://localhost:5000/
identityServer給我提供一個固定的地址:
http://localhost:5000/.well-known/openid-configuration
這裏給咱們一些基本的配置,基本的信息
{ "issuer": "http://localhost:5000", "jwks_uri": "http://localhost:5000/.well-known/openid-configuration/jwks", "authorization_endpoint": "http://localhost:5000/connect/authorize", "token_endpoint": "http://localhost:5000/connect/token", "userinfo_endpoint": "http://localhost:5000/connect/userinfo", "end_session_endpoint": "http://localhost:5000/connect/endsession", "check_session_iframe": "http://localhost:5000/connect/checksession", "revocation_endpoint": "http://localhost:5000/connect/revocation", "introspection_endpoint": "http://localhost:5000/connect/introspect", "device_authorization_endpoint": "http://localhost:5000/connect/deviceauthorization", "frontchannel_logout_supported": true, "frontchannel_logout_session_supported": true, "backchannel_logout_supported": true, "backchannel_logout_session_supported": true, "scopes_supported": [ "api", "offline_access" ], "claims_supported": [], "grant_types_supported": [ "authorization_code", "client_credentials", "refresh_token", "implicit", "urn:ietf:params:oauth:grant-type:device_code" ], "response_types_supported": [ "code", "token", "id_token", "id_token token", "code id_token", "code token", "code id_token token" ], "response_modes_supported": [ "form_post", "query", "fragment" ], "token_endpoint_auth_methods_supported": [ "client_secret_basic", "client_secret_post" ], "subject_types_supported": [ "public" ], "id_token_signing_alg_values_supported": [ "RS256" ], "code_challenge_methods_supported": [ "plain", "S256" ] }
這裏是支持的幾種模式
這裏是加密的方式
會暴露一些endpoint
下一節課 咱們要實現Resource。寫一個API