<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          .NET 云原生架構師訓練營(Identity Server)--學習筆記

          共 3566字,需瀏覽 8分鐘

           ·

          2021-07-05 11:58

          目錄

          • OAuth 2.0

          • OpenID Connect

          • QuickStart

          OAuth 2.0

          • 概念

          • 過程

          • 通信

          • 組件

          • 示例代碼

          概念

          OAuth 2.0 是一個授權協(xié)議,它允許軟件應用代表(而不是充當)資源擁有者去訪問資源擁有者的資源(如何讓一個系統(tǒng)組件獲取另一個系統(tǒng)組件的訪問權限)

          • 受保護的資源:是資源擁有者有權限訪問的組件

          • 資源擁有者:有權訪問 API,并能將 API 訪問權限委托出去

          • 客戶端:凡是使用了受保護資源上的 API,都是客戶端

          過程

          通信

          組件

          • 訪問令牌 token

          • 權限范圍 scope

          • 刷新令牌 refresh token

          • 授權許可 grant_type

          grant_type 授權方式 授權前置條件 使用通信信道 說明
          authorization_code/PKCE 授權碼模式 授權碼 前端/后端 客戶端通過code在后端與授權服務器進行交互獲取令牌
          implict(不建議使用) 簡化模式


          password(不建議使用) 密碼模式 用戶名/密碼 后端 在客戶端輸入用戶名和密碼,由客戶端向授權服務器獲取令牌
          client_credentials 客戶端模式 后端
          device_code 設備碼


          refresh_token 刷新token

          用refresh_token來換取新的token

          授權碼模式

          1. 第三方應用首先向服務提供商申請 client_id 應用唯一標識、Client_secret 密鑰,用于后續(xù)獲取令牌時提供身份校驗

          2. 申請授權碼:此時要提供預分配好的 client_id 標識來源,提供 scope 標識要申請的權限,提供 redirect_uri 標識授權完畢后要回跳的第三方應用鏈接

          3. 第一次 302 重定向:認證服務器展示登錄授權頁

          4. 第二次 302 重定向:在用戶提交授權,認證服務器認證成功后,會分配授權碼 code,并重定向回第三方應用的 redirect_uri

          5. (建議第三方應用要根據(jù)當前用戶會話生成隨機且唯一的 state 參數(shù),并且收到授權碼時先進行校驗,避免 CSRF 攻擊)最后,第三方應用會向認證服務器申請令牌 access_token,此時要提供預分配好的 code、client_id、client_secret 以便認證。這一步是在后端之間完成的,對用戶不可見。access_token 是有有效期的,過期后需要刷新

          6. 拿到令牌 access_token 后,第三方應用就可以訪問資源方,獲取所需資源 access_token 相當于用戶的 session id

          選擇正確的許可類型

          示例代碼

          地址:https://github.com/skoruba/IdentityServer4.Admin

          OpenID Connect

          • OAuth2.0 的不足之處

          • OIDC 概念

          OAuth2.0 的不足之處

          OAuth2.0 中的 access_token 就是酒店的房卡,誰都可以擁有房卡,有房卡就可以打開酒店的門,但是房卡上并沒有當前使用房卡的用戶信息,如果需要知道當前房卡所有人的信息需要單獨再向酒店的前臺去詢問

          OIDC 概念

          Open ID Connect 1.0 是建立在 OAuth 2.0 之上的一個身份層

          https://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthorizationEndpoint

          QuickStart

          安裝模板

          dotnet new -i IdentityServer4.Templates

          查看模板

          dotnet new

          使用模板創(chuàng)建

          dotnet new is4inmem -n QuickStart

          已成功創(chuàng)建模板“IdentityServer4 with In-Memory Stores and Test Users”。

          打開項目,啟動

          點擊進入登錄頁面,使用默認用戶登錄

          登錄結果

          根據(jù)配置文件通過ClientCredentials的方式獲取token

          // m2m client credentials flow client
          new Client
          {
          ClientId = "m2m.client",
          ClientName = "Client Credentials Client",

          AllowedGrantTypes = GrantTypes.ClientCredentials,
          ClientSecrets = { new Secret("511536EF-F270-4058-80CA-1C89C192F69A".Sha256()) },

          AllowedScopes = { "scope1" }
          },

          根據(jù)配置文件通過Code的方式獲取token

          // interactive client using code flow + pkce
          new Client
          {
          ClientId = "interactive",
          ClientSecrets = { new Secret("49C1A7E1-0C79-4A89-A3D6-A37998FB86B0".Sha256()) },

          AllowedGrantTypes = GrantTypes.Code,
          RequirePkce = false,
          AllowPlainTextPkce = true,

          RedirectUris = { "https://localhost:44300/signin-oidc" },
          FrontChannelLogoutUri = "https://localhost:44300/signout-oidc",
          PostLogoutRedirectUris = { "https://localhost:44300/signout-callback-oidc" },

          AllowOfflineAccess = true,
          AllowedScopes = { "openid", "profile", "scope2" }
          },

          訪問認證接口獲取授權碼

          https://localhost:5001/connect/authorize?client_id=interactive&scope=openid&response_type=code&redirect_uri=https://localhost:44300/signin-oidc&nonce=xyz

          返回授權碼

          https://localhost:44300/signin-oidc?code=BC56FE53D39BD46A5D55D43F485E23D7FF6583FEDD7A2A0B7A2A3DFDF5C52935&scope=openid&session_state=SwfB-jWoQ16C67cm5c_ANqbVE1R50Krj55GuJuArEQ0.BE30A11CD461DC430C5121AEFB4A4E82

          課程鏈接

          .NET云原生架構師訓練營講什么,怎么講,講多久


          歡迎各位讀者加入微信群一起學習交流,
          在公眾號后臺回復“加群”即可~~


          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91超碰影院青青草人人 | 无码一页 | 麻豆一区二区99久久久久 | 中文字幕专区 | 91无码AⅤ在线 |