簡體   English   中英

使用jwt和openidconnect的ASP.NET框架身份驗證

[英]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.

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