我敢肯定,這個問題的答案一定很明顯,因為這是一件顯而易見的事情,但我似乎找不到任何指導。
我有一個 ASP.NET Core 最小 API,并且想要添加身份驗證。我已經在不同的專案中設定了身份,并希望對 API 使用相同的資料庫(即相同的用戶)。
我看到了這篇博文,看起來很有希望,直到我意識到那里的代碼將用戶名和密碼檢查為純文本(admin在示例中使用兩者)......
if (credentials[0] == "admin" && credentials[1] == "admin")
問題在于(謝天謝地),Identity 不會以純文本形式存盤密碼,它們是散列的,所以我無法進行簡單的比較。
我嘗試對傳入的密碼進行哈希處理,如this answer所示,但這不起作用,因為每次呼叫時哈希值都不同_userManager.PasswordHasher.HashPassword。
我嘗試使用 ASP.NET Core 的SignInManager.CanSignInAsync方法來檢查是否可以使用憑據登錄,但這需要我將以下內容添加到Program...
builder.Services.AddIdentity<User, IdentityRole>(options => {
// options removed for clarity
})
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<AppDbContext>();
但是,一旦我這樣做了,對 API 的任何請求都會嘗試重定向到登錄頁面,這顯然在從代碼呼叫 API 時不起作用。
我只能在 Microsoft 的網站上找到這篇文章,但假設您使用的是 Azure。目前,我仍在我的本地機器上開發這個,我還不知道專案所有者是想部署到 Azure 還是他們自己的托管服務器,所以那里的代碼對我沒有幫助。
任何人都可以向我解釋我是如何做如此明顯而簡單的任務的嗎?如果我需要提供更多資訊,請告訴我。謝謝
uj5u.com熱心網友回復:
你看過 Bipin Joshi 關于這個主題的系列文章嗎?我的猜測是你已經過了前幾個,但你可能會發現這些有用......
在 ASP.NET Core Minimal API 中實作 JWT 身份驗證
將 ASP.NET Core 身份與 JWT 和最小 API 集成
我在使用該方法時所做的一項更改是getTokenAPI 呼叫只接受string用戶名和密碼的兩個引數,而不是User物件。鑒于它只有兩個引數,我發現在處理不同的專案時這會使生活更輕松,因為您不需要類定義。不過取決于你。
為了呼叫 API,您需要先呼叫getToken,并傳入用戶名和密碼。獲得令牌后,您可以HtpClient按如下方式設定身份驗證...
client.DefaultRequestHeaders.Add("Authorization", "Bearer " token);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480458.html
