[英]ASP.NET framework authentication with jwt and openidconnect
我有一個使用openidconnect身份驗證和okta配置的ASP.NET MVC應用程序(.Net Framework 4.7.2)。 如果未授權用戶,則該應用會將用戶重定向到okta進行登錄,並且適用於Web瀏覽器。
我們要求允許移動應用通過Web視圖在應用內呈現某些頁面,並且它們將傳遞帶有訪問令牌的請求標頭授權。
經過一番Google搜索后,我發現我可以添加jwt和openidconnect身份驗證,因此將檢查請求標頭中是否存在授權標頭(如果存在),我們將使用jwt else openidconnect。
我嘗試使用.NET Core 2.2,但工作正常,但不確定如何在.net框架中實現類似功能。
.NET Core代碼段
services.AddAuthentication("DefaultPolicy")
.AddJwtBearer(options => {
options.Authority = Configuration["Okta:Issuer"];
options.Audience = "auth";
})
.AddCookie()
.AddOpenIdConnect(options => {
options.ClientId = Configuration["Okta:ClientId"];
options.ClientSecret = Configuration["Okta:ClientSecret"];
options.Authority = Configuration["Okta:Issuer"];
options.CallbackPath = "/authorization-code/callback";
options.ResponseType = "code";
options.SaveTokens = true;
options.UseTokenLifetime = false;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("openid");
options.Scope.Add("profile");
options.TokenValidationParameters = new TokenValidationParameters {
NameClaimType = "name"
};
})
.AddPolicyScheme("DefaultPolicy", "Authorization Bearer or OIDC", o => {
o.ForwardAuthenticate = "AuthenticateSignInPolicy";
o.ForwardSignIn = "AuthenticateSignInPolicy";
o.ForwardChallenge = "ChallengePolicy";
})
.AddPolicyScheme("AuthenticateSignInPolicy", "Authorization Bearer or OIDC", options => {
options.ForwardDefaultSelector = context => {
var authHeader = context.Request.Headers["Authorization"].FirstOrDefault();
if (authHeader?.StartsWith("Bearer ") == true)
{
return JwtBearerDefaults.AuthenticationScheme;
}
return CookieAuthenticationDefaults.AuthenticationScheme;
};
})
.AddPolicyScheme("ChallengePolicy", "Authorization Bearer or OIDC", options => {
options.ForwardDefaultSelector = context => {
var authHeader = context.Request.Headers["Authorization"].FirstOrDefault();
if (authHeader?.StartsWith("Bearer ") == true)
{
return JwtBearerDefaults.AuthenticationScheme;
}
return OpenIdConnectDefaults.AuthenticationScheme;
};
});
我將在這里假設您正在遵循OKTA提供的快速入門: https : //developer.okta.com/quickstart/#/okta-sign-in-page/dotnet/aspnet4 。
在他們的指南中,他們告訴您添加一個Startup類。 您需要將其“ app.UseOktaMVC”替換為“ app.AddJwtBearerAuthentication”。
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.AddJwtBearerAuthentication(new OktaWebApiOptions()
{
OktaDomain = Constants.GetIssuer,
AuthorizationServerId = string.Empty,
Audience = Constants.GetAudience,
});
}
}
該擴展由OKTA提供。 如果您想了解如何自己注冊所有內容,可以在github上找到其源代碼。 https://github.com/okta/okta-aspnet/blob/master/Okta.AspNet/OktaMiddlewareExtensions.cs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.