IdentityServer4 中文文檔 -10- (快速入門)使用密碼保護API

来源:http://www.cnblogs.com/ideck/archive/2017/08/05/ids_quickstarts_10.html
-Advertisement-
Play Games

IdentityServer4 是一個提供 認證服務,單點登錄/登出(SSO),API訪問控制,聯合認證通道的可定製、免費商業支持的框架。 ...


IdentityServer4 中文文檔 -10- (快速入門)使用密碼保護API


原文:http://docs.identityserver.io/en/release/quickstarts/2_resource_owner_passwords.html

上一篇:IdentityServer4 中文文檔 -9- (快速入門)使用客戶端憑證保護API
下一篇:IdentityServer4 中文文檔 -11- (快速入門)添加基於 OpenID Connect 的用戶認證

OAuth 2.0 資源所有者密碼授權 允許一個客戶端發送用戶名和密碼到令牌服務並獲得一個表示該用戶訪問令牌。

(OAuth 2.0) 規範 建議僅對“受信任”的應用程式使用資源所有者密碼授權。一般來說,當你想要驗證一個用戶並請求訪問令牌的時候,使用互動式 OpenID Connect 流通常會更好。

不過,這個授權類型允許我們在 IdentityServer 快速入門中引入 用戶 的概念,這是我們要展示它的原因。

添加用戶

就像基於記憶體存儲的資源(即 範圍 Scopes)和客戶端一樣,對於用戶也可以這樣做。

註意:查看基於 ASP.NET Identity 的快速入門以獲得更多關於如何正確存儲和管理用戶賬戶的信息。

TestUser 類型表示一個測試用戶及其身份信息。讓我們向配置類(如果你有嚴格按照順序進行演練,那麼配置類應該在 QuickstartIdentityServer 項目的 Config.cs 文件中)中添加以下代碼以創建一對用戶:

首先添加以下 using 語句 到 Config.cs 文件中:

public static List<TestUser> GetUsers()
{
    return new List<TestUser>()
    {
        new TestUser
        {
            SubjectId="1",
            Username="愛麗絲",
            Password="password"
        },
        new TestUser
        {
            SubjectId="2",
            Username="博德",
            Password="password"
        }
    };
}

然後將測試用戶註冊到 IdentityServer:

public void ConfigureServices(IServiceCollection services)
{
    // 使用記憶體存儲,密鑰,客戶端和資源來配置身份伺服器。
    services.AddIdentityServer()
        .AddTemporarySigningCredential()
        .AddInMemoryApiResources(Config.GetApiResources())
        .AddInMemoryClients(Config.GetClients())
        .AddTestUsers(Config.GetUsers());
}

AddTestUsers 擴展方法在背後做了以下幾件事:

  • 為資源所有者密碼授權添加支持
  • 添加對用戶相關服務的支持,這服務通常為登錄 UI 所使用(我們將在下一個快速入門中用到登錄 UI)
  • 為基於測試用戶的身份信息服務添加支持(你將在下一個快速入門中學習更多與之相關的東西)

為資源所有者密碼授權添加一個客戶端定義

你可以通過修改 AllowedGrantTypes 屬性簡單地添加對已有客戶端授權類型的支持。

通常你會想要為資源所有者用例創建獨立的客戶端,添加以下代碼到你配置中的客戶端定義中:

public static IEnumerable<Client> GetClients()
{
    return new List<Client>
    {
        // 省略其他客戶端定義...

        // 資源所有者密碼授權客戶端定義
        new Client
        {
            ClientId = "ro.client",

            AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,

            ClientSecrets =
            {
                new Secret("secret".Sha256())
            },
            AllowedScopes = { "api1" }
        }
    };
}

使用密碼授權請求一個令牌

客戶端看起來跟之前 客戶端憑證授權 的客戶端是相似的。主要差別在於現在的客戶端將會以某種方式收集用戶密碼,然後在令牌請求期間發送到令牌服務。

IdentityModel 的 TokenClient 在這裡再次為我們提了供幫助:

// 請求以獲得令牌
var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret");
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("愛麗絲","password","api1");
if (tokenResponse.IsError)
{
    Console.WriteLine(tokenResponse.Error);
    return;
}
Console.WriteLine(tokenResponse.Json);
Console.WriteLine("\n\n");

當你發送令牌到身份 API 端點的時候,你會發現與客戶端憑證授權
相比,資源所有者密碼授權有一個很小但很重要的區別。訪問令牌現在將包含一個 sub 信息,該信息是用戶的唯一標識。sub 信息可以在調用 API 後通過檢查內容變數來被查看,並且也將被控制台應用程式顯示到屏幕上。

sub 信息的存在(或缺失)使得 API 能夠區分代表客戶端的調用和代表用戶的調用。

上一篇:IdentityServer4 中文文檔 -9- (快速入門)使用客戶端憑證保護API
下一篇:IdentityServer4 中文文檔 -11- (快速入門)添加基於 OpenID Connect 的用戶認證


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.背景由來 需求經常變化,每次都要發給相關人員查看,本地查看還需要設置相容性,太麻煩了。因此考慮是否可以利用伺服器來實時更新原型文件了。 二.相關準備 首先需要一臺閑置伺服器,(其實只要幾g的空間足夠。) 其他就是相關文件準備了,Tomcat,jdk等等。 三.具體搭建 1.安裝jdk a.在官網 ...
  • 利用awk分析data.csv中label列各取值的分佈. 在終端執行head data.csv查看數據: 因為行內包含換行符的項會被分成多行(例如上面的第3,4行),所以需要結合正則匹配 -F ',' 表示根據逗號分隔; $(NF-1)~/^[A-Z][0-9]/ 表示分隔後的倒數第二項(在此指取 ...
  • CentOS系統上使用rpm命令管理程式包:安裝、卸載、升級、查詢、校驗、資料庫維護 1.基本安裝 2.rpm選項 3.軟體包腳本 4.軟體包的升級 升級時的註意事項: 不要對內核進行升級操作,linux支持多內核並存,所以直接安裝新內核就好. 如果升級時原程式的配置文件被更改過的話,新程式不會覆蓋 ...
  • 1、下載fastqc 2、解壓 3、 給予執行許可權,否則執行的時候會顯示沒有許可權 cd FastQCchmod 755 fastqc 4、加入到PATH export PATH=/home/h/FastQC/:$PATH 4、加入到PATH 5、測試 fastqc --help 5、測試 使用例子 ...
  • 1.來源 開始我還不知道cron到底來源於哪裡,不求甚解的我也沒做過多瞭解,現在突然用到所以寫一下。 cron計劃任務 其實只是linux 一個執行計劃的一個工具或者執行程式。 在Linux系統中,計劃任務一般是由cron承擔,我們可以把cron設置為開機時自動啟動。cron啟動後,它會讀取它的所有 ...
  • 轉載自:http://www.cnblogs.com/cswuyg/p/3830703.html 在Linux系統中,動態鏈接文件稱為動態共用對象(DSO,Dynamic Shared Objects),簡稱共用對象,一般是以.so為擴展名的文件。在Windows系統中,則稱為動態鏈接庫(Dynam ...
  • 目錄: 小孫想要總結這一年來學到的關於stm32的USB相關知識,但又不知道怎麼總結,於是決定 從頭開始調試固件庫代碼,直到實現USB功能為止! 首先準備參照正點原子《第88講 USB虛擬串口實驗-M3》,把HID相關庫包含進工程中,工 程選用正點原子的USART試驗。因為目前手裡的開發板是“微雪電 ...
  • 1,查看3306埠被什麼程式占用 lsof -i :3306 2,查看3306埠是被哪個服務使用著 netstat -tunlp | grep :3306 3,查看3306埠的是否已在使用中,可驗證使用該埠的服務是否已正常運行 netstat -an | grep :3306 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...