Asp.net-Core

如何正確使用身份伺服器 4 的自省端點?

  • February 9, 2017

我正在使用 Identity Server 4,並且我正在嘗試使用自省端點,但只是通過文件我沒有得到它。

文件只是給出了這個例子

POST /connect/introspect
Authorization: Basic xxxyyy

token=<token>

現在,為什麼會有這個基本的身份驗證,什麼應該是 xxxyyy?我的意思是,我的應用程序中沒有設置基本身份驗證。我剛剛使用 ASP.NET Core 設置了 Identity Server 4,如下所示ConfigureServices

services.AddIdentityServer()
           .AddTemporarySigningCredential()
           .AddInMemoryApiResources(ApiResourceProvider.GetAllResources())
           .AddAspNetIdentity<Usuario>();

並且在Configure

app.UseIdentity();
app.UseIdentityServer();

現在我嘗試了一個 POST 到 /connect/introspect 的 body just token=<token>,但它返回了 404。

我相信我真的沒有得到它。

我們如何在 ASP.NET Core 中將自省端點與 Identity Server 4 一起使用?

IdSvr4 的實現非常棒,但是文件還有很多不足之處——我花了一個小時在網際網路上搜尋,以便能夠提出一個可行的解決方案。如果您不熟悉某個概念,被告知“閱讀規範”並不總是有幫助 - 這在他們的論壇上經常發生。

所以 - 你必須傳遞給的POST /connect/introspect是一個範圍秘密

您可以通過更改config.cs類來配置快速入門。如果您已對其進行了自定義,或者未使用快速入門,您將需要更新您使用的任何數據儲存 - 但這個概念應該(希望)是清晰的。

public static IEnumerable<ApiResource> GetApiResources()
{
   return new List<ApiResource>
   {
       new ApiResource("MyResource", "My_Resource_DisplayName")
       {
           ApiSecrets = new List<Secret>
           {
               new Secret("hello".Sha256())
           },
           Scopes=
           {
               new Scope("MY_CUSTOM_SCOPE")
           }
       }
   };
}

現在…

  1. 確保您的客戶有範圍MY_CUSTOM_SCOPE
  2. MY_CUSTOM_SCOPE確保您在獲取不記名令牌時已請求範圍。

現在,製作一個 API 資源名稱和機密的 Base64 編碼字元串,如下所示:

Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", userName, password)));

其中使用者名MyResource和密碼是明文hello(obv。使用您自己的值!) - 應該以如下所示的字元串結尾:TXlSZXNvdXJjZTpoZWxsbw==

現在,您可以發佈到 IDSvr4…

POST /connect/introspect
Authorization: Basic TXlSZXNvdXJjZTpoZWxsbw==
Accept: application/json
Content-Type: application/x-www-form-urlencoded

token=<YOUR_TOKEN>

因此,只要您的不記名令牌具有範圍MY_CUSTOM_SCOPE(或您最終呼叫它的任何內容) - 您現在應該能夠使用 IdSvr 的自省端點來獲取有關它的資訊。

引用自:https://stackoverflow.com/questions/42126909