首頁 >後端開發 >C++ >如何在 ASP.NET Core 中實現基於令牌的身份驗證?

如何在 ASP.NET Core 中實現基於令牌的身份驗證?

Linda Hamilton
Linda Hamilton原創
2024-12-30 04:39:57625瀏覽

How to Implement Token-Based Authentication in ASP.NET Core?

ASP.NET Core 中基於令牌的身份驗證

在ASP.NET Core 中實現基於令牌的身份驗證可能是一項挑戰,尤其是從以前版本的過渡時框架。本文提供了有關如何設定 WebApi 應用程式以進行基於令牌的身份驗證、解決 .NET Core 版本的常見問題和更新的詳細說明。

啟動設定

中Startup.cs,設定您的服務並在ConfigureServices方法中加入以下程式碼:

const string TokenAudience = "Myself";
const string TokenIssuer = "MyProject";

var claimsPrincipal = new System.Security.Claims.ClaimsPrincipal(new[]
{
    new System.Security.Claims.ClaimsIdentity(new[]
    {
        new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Name, "Demo User")
    })
});

public string BuildJwt()
{
    var keySecret = authenticationConfiguration["JwtSigningKey"];
    var symmetricKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(keySecret));

    var creds = new SigningCredentials(symmetricKey, SecurityAlgorithms.HmacSha256);

    var token = new JwtSecurityToken(
        issuer: TokenIssuer,
        audience: TokenAudience,
        claims: claimsPrincipal.Claims,
        expires: DateTime.Now.AddMinutes(20),
        signingCredentials: creds
    );

    return new JwtSecurityTokenHandler().WriteToken(token);
}

接下來,配置身份驗證管道在C onfigure方法中:

app.UseAuthentication();
app.UseAuthorization();

使用身份驗證中間件

確保app.UseAuthentication()中間件放置在任何需要用戶資訊的中間件之前,例如app .UseMvc()。這將檢查授權標頭中的承載令牌。

授權策略(可選)

如果需要,指定授權策略以限制對某些控制器或操作的存取僅適用不記名令牌:

services.AddAuthorization(auth =>
{
    auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
        .AddAuthenticationTypes(JwtBearerDefaults.AuthenticationType)
        .RequireAuthenticatedUser().Build());
});

產生Token

要產生用於身份驗證的令牌,請使用前面定義的BuildJwt 方法。例如,在控制器操作中:

[HttpPost]
public string AnonymousSignIn()
{
    return BuildJwt();
}

測試和驗證

使用jwt.io 等工具取得令牌並使用金鑰驗證其簽章在authenticationConfiguration中指定的密鑰。

透過仔細遵循這些說明,您可以在ASP.NET中成功實現基於令牌的身份驗證核心 WebApi 應用程式並有效保護您的 API 端點。

以上是如何在 ASP.NET Core 中實現基於令牌的身份驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn