簡體   English   中英

從IdentityA 4中的用戶獲取WebApi的所有聲明

[英]Getting all the claims from a WebApi for a user in Identity Server 4

我已經詳細介紹了Ids4的示例,特別是客戶端webapi場景。

https://github.com/IdentityServer/IdentityServer4/tree/master/samples/Clients

該示例主要說明客戶端如何獲取訪問令牌,將訪問令牌發送到WebAPI以及WebAPI根據范圍或聲明等策略進行檢查。

我的場景有以下約束。

  • 訪問令牌包含最少的信息。 意思是我沒有把所有最敏感的信息放在其中。
  • WebAPI需要針對策略的聲明(而不僅僅是范圍),因為聲明將特定於用戶,而不是客戶端應用程序。

options.AddPolicy("User", policy =>
{
    policy.RequireClaim("ProfileAccess","user:read");
});
options.AddPolicy("Admin", policy =>
{
    policy.RequireClaim("ProfileAccess", "user:read", "user:write");
});

在MVC客戶端中,OpenId Connect配置有一個選項GetClaimsFromUserInfoEndpoint,它使用令牌調用UserInfo端點,並將這些聲明轉換為委托人的聲明。 WebAPI有類似的東西,還是我自己要實現它? 我也不想在訪問令牌中包含太多信息。

最簡單的方法是在Identity Server發出訪問令牌時在訪問令牌中包含所需的聲明。 因此,API將在驗證令牌后獲得聲明,您可以創建策略要求以檢查聲明。 您可以定義API resources以包含用戶聲明。 請參閱定義API資源:

http://docs.identityserver.io/en/latest/reference/api_resource.html#refapiresource

您可以在ApiResource(和Scope)上找到UserClaims屬性,以添加應包含在訪問令牌中的關聯用戶聲明類型的列表。

GetClaimsFromUserInfoEndpoint不是為API設計的,有關詳細信息,請參閱此文章

如果您不想在令牌中包含聲明,則可以使用委托fow獲取新的訪問令牌以獲取用戶的信息。

看起來,你需要的是一種Extension grant ,即授權

您希望為您的API提供比客戶端更多的訪問權限,但您不能僅使用ClientCredentials流或授予,因為它不包含用戶信息。 這就是委托可以提供幫助的情況:您只需使用sub (userId)聲明為您的API提供一個令牌,並且API會請求一個全新的令牌,並將其自己的憑據與原始令牌一起提供。

回答原始問題:盡管在技術上可以使用原始令牌,但是在客戶端請求的情況下進入API,它不會提高安全性:如果您的客戶端是JS-app並且它在Session中保留原始令牌或在瀏覽器中的本地存儲,每個人都可以獲得該令牌並從curlpostman調用UserInfo端點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM