IdentityServer4入門三:受權模式

在入門1、入門二咱們實現了一個完整的API保護的過程。須要保護的API只需在其Controler上應用[Authorize]特性,來顯式指定受保護的資源。而咱們實現的這個例子,所應用的模式叫「Client Credentials」,在Config.cs中有這麼一段代碼html

 

 

 

「Client Credentials」(客戶端憑證)模式,是最簡單的受權模式,由於受權的流程僅發生在Client與Identity Server之間。web

該模式的適用場景爲服務器與服務器之間的通訊。好比對於一個電子商務網站,將訂單和物流系統分拆爲兩個服務分別部署。物流系統須要獲取須要派送的物品,而訂單系統須要跟蹤物流信息。而這兩個系統之間服務的受權就能夠經過這種模式來實現。api

官方客戶受權幾種說明https://identityserver4.readthedocs.io/en/latest/topics/clients.html瀏覽器

OAuth2.0 定義了四種受權模式:服務器

  1. Implicit:簡化模式;直接經過瀏覽器的連接跳轉申請令牌。
  2. Client Credentials:客戶端憑證模式;該方法一般用於服務器之間的通信;該模式僅發生在Client與Identity Server之間。
  3. Resource Owner Password Credentials:密碼模式
  4. Authorization Code:受權碼模式;

Implicit

就是認證服務器提供網頁進行登陸。受保護的網站使用該模式,訪問須要受權的網頁時若是沒認證的會自動跳轉到認證服務器的登陸界面,登陸後自動回到原來訪問的受權頁面。mvc

Resource Owner Password Credentials

用戶須要向客戶端提供本身的用戶名和密碼。客戶端使用這些信息,向"服務商提供商"索要受權。ide

在這種模式中,用戶必須把本身的密碼給客戶端,這一般用在用戶對客戶端高度信任的狀況下,好比客戶端是操做系統的一部分,或由一個著名公司出品。通常不建議使用該模式。認證服務器只有在其餘受權模式沒法執行的狀況下,才應考慮使用這種模式。網站

 

 

Authorization Code

咱們使用第三方使用QQ賬號進行登陸的例子說明spa

 

 

這有一篇不錯的說明,上圖也來自該網頁
http://www.javashuo.com/article/p-nzebpclj-gb.html操作系統

 

一個認證服務器,能夠應用兩種模式嗎?

能夠的。後面的例子,咱們要爲入門一的例子上加上Implicit模式。下面源碼中的將是一個新的web的網站,使用44302端口

public static IEnumerable<Client> GetClients()
{
    return new List<Client>
    {
        new Client
        {
            ClientId = "client",
            // no interactive user, use the clientid/secret for authentication
            AllowedGrantTypes = GrantTypes.ClientCredentials,
            // secret for authentication
            ClientSecrets =
            {
                new Secret("secret".Sha256())
            },
            // scopes that client has access to
            AllowedScopes = { "api1" }
        },
        new Client
        {
            ClientId = "mvc",
            ClientName = "MVC Client",            
            AllowedGrantTypes = GrantTypes.Hybrid,
            AllowOfflineAccess = true,
            ClientSecrets = { new Secret("secret".Sha256()) },
            RedirectUris =           { "https://localhost:44302/signin-oidc" },
            PostLogoutRedirectUris = { "https://localhost:44302/" },
            FrontChannelLogoutUri =  "https://localhost:44302/signout-oidc",
            AllowedScopes =
            {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
                IdentityServerConstants.StandardScopes.Email,
                "api1", "api2.read_only"
            },
        }
    };
}

  

各個模式的Client源碼,能夠在這找
https://identityserver4.readthedocs.io/en/latest/topics/clients.html

相關文章
相關標籤/搜索