[英]What type of 3rd party authentication(OAuth) should be used to sign in users to own API
我有一個 API,它使用 Microsoft Identity Platform 作為對用戶進行身份驗證的方式。
我需要重構它,因為我認為我在實現中犯了一些錯誤。
因此,重新開始,我想知道如何處理第 3 方驗證器的邏輯是什么。 話雖如此,如果有人可以確認以下身份驗證流程是否有意義,我將不勝感激。
似乎合理的序列是:身份驗證序列
login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
請求?code
參數重定向到客戶端應用程序code
和redirect_uri
發送到我的 APIcode
傳遞給令牌端點login.microsoftonline.com/{tenant}/oauth2/v2.0/token
來獲取access_token
和refresh_token
。令牌驗證
在數據庫中存儲令牌時,存儲它們的到期日期。
refresh_token
刷新令牌並將舊令牌替換為新令牌。Microsoft 為不同的客戶端提供身份驗證庫 (MSAL)。 但是這些庫,據我了解,是對用戶進行身份驗證,將令牌存儲在本地,並使用 Microsft Graph API。這讓我質疑我的流程的可靠性,因為我制作它的方式不兼容有了這些庫。
我相信您不需要做所有這些並且可以使事情變得非常簡單。
您可以執行以下操作:
假設您使用的是 .Net 5/Core,您需要先在 Startup.cs 中添加以下行:
services
.AddMicrosoftIdentityWebApiAuthentication(Configuration, "ApiSettingsConfigurationSectionName")
.EnableTokenAcquisitionToCallDownstreamApi()//This does the magic of getting the token for protected resources.
.AddInMemoryTokenCaches();
那么這就是您如何在 API 控制器中獲取受保護資源的令牌:
private readonly ITokenAcquisition _tokenAcquisition;
...
...
...
public YourController(ITokenAcquisition tokenAcquisition,
...other injected parameters
)
{
_tokenAcquisition = tokenAcquisition;
...
}
/// <summary>
/// Gets the access token on behalf of signed-in user to perform Azure
/// Resource Manager (ARM) API.
/// </summary>
/// <returns>
/// Access token.
/// </returns>
private async Task<string> GetAccessTokenForAzureSubscriptionManagementApiRequest()
{
string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(['scopes for the protected API e.g. https://management.azure.com/user_impersonation']);
return accessToken;
}
Microsoft 為不同的客戶端提供身份驗證庫 (MSAL)。 但是這些庫,據我了解,是對用戶進行身份驗證,將令牌存儲在本地,並使用 Microsft Graph API。
這不完全正確。 MSAL 可用於獲取受 Azure AD 保護的任何 API 的令牌。 圖 API 當然是其中之一,但您也可以對自己的 API 使用 MSAL,前提是它受到 Azure AD 的保護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.