2017-02-09 24 views
5

我正在使用Identity Server 4,我試圖使用自省端點,但只是通過文檔我沒有得到它。如何在身份服務器4上正確使用自檢端點?

該文檔只給出了這樣的例子

POST /connect/introspect 
Authorization: Basic xxxyyy 

token=<token> 

現在,爲什麼會存在這種基本的身份驗證和應該是什麼XXXYYY?我的意思是,在我的應用程序中沒有設置基本身份驗證。我一直在使用ASP.NET核心如下的ConfigureServices剛剛安裝的Identity Server 4:

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

Configure

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

現在,我已經嘗試只是一個POST到/連接/與反思身體只是token=<token>,但它返回了一個404.

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

我們如何在ASP.NET Core中使用自檢端點和Identity Server 4?

+0

你想用內省端點實現什麼? –

+1

我正在嘗試驗證令牌的有效性。我的意思是,一個令牌可能已過期,或者它可能不是一個有效的令牌。我希望能夠使用驗證。搜索一下,我發現內省端點是實現它的方式,但我並沒有真正瞭解它的使用方式。 – user1620696

回答

3

自檢通常由API用於驗證傳入的令牌。另外內省端點需要按照規範進行身份驗證。

您需要設置一個API的祕密:

https://identityserver4.readthedocs.io/en/release/reference/api_resource.html

然後使用API​​名稱/祕密反對內省端點進行身份驗證。使用基本身份驗證或發佈表單中的值。

+4

OP:稍微擴展@leastprivilege的答案:你想base64對字符串'「[yourApiName]:[yourApiSecret]''進行編碼,並用它作爲'Authorization'頭文件'basic'的值。 – Mashton

0

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資源的名稱與密碼這樣的SHA256哈希:

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

其中,username是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的內省端點來獲取它的信息。

希望有幫助!

相關問題