如何正確使用身份伺服器 4 的自省端點?
我正在使用 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>();並且在
Configureapp.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") } } }; }現在…
- 確保您的客戶有範圍
MY_CUSTOM_SCOPEMY_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 的自省端點來獲取有關它的資訊。