第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用 IdentityServer4 從單個(gè)客戶端接受承載身份驗(yàn)證和 OpenIdConnect

使用 IdentityServer4 從單個(gè)客戶端接受承載身份驗(yàn)證和 OpenIdConnect

C#
泛舟湖上清波郎朗 2022-10-15 15:16:42
在對(duì)IdentityServer4 Quickstart 示例解決方案(特別是 8_AspNetIdentity 示例)進(jìn)行一些調(diào)整后,我遇到了一些問(wèn)題。我會(huì)先說(shuō)我不確定我正在嘗試做的事情是否不受支持,或者我做錯(cuò)了。此示例解決方案包含與我的問(wèn)題相關(guān)的以下項(xiàng)目:一個(gè)身份服務(wù)器,一個(gè)使用 OpenIdConnect 對(duì)其用戶進(jìn)行身份驗(yàn)證的 MVC 客戶端(名為 MVCClient),對(duì)其用戶使用不記名身份驗(yàn)證的 Web API 客戶端(名為 API)設(shè)計(jì)為 API 客戶端的控制臺(tái)應(yīng)用程序(名為 ResourceOwnerClient)我正在嘗試做的是將 API 項(xiàng)目合并到 MVCClient 中,以便 MVCClient 既可以使用 OIDC 對(duì)來(lái)自其 MVC 網(wǎng)站的用戶進(jìn)行身份驗(yàn)證,也可以使用承載身份驗(yàn)證對(duì) ResourceOwnerClient 進(jìn)行身份驗(yàn)證。我對(duì) MVCClient 的 Startup.cs 進(jìn)行了以下更改:改為services.AddMvc();:services.AddMvc(config =>{    var policy = new AuthorizationPolicyBuilder(new[]        {            JwtBearerDefaults.AuthenticationScheme,            CookieAuthenticationDefaults.AuthenticationScheme,            "oidc"        })        .RequireAuthenticatedUser()        .Build();    config.Filters.Add(new AuthorizeFilter(policy));});將 JWT 不記名選項(xiàng)添加到services.AddAuthentication():.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>{    options.Authority = "http://localhost:5000";    options.RequireHttpsMetadata = false;    options.Audience = "api1";})現(xiàn)在從技術(shù)上講,這確實(shí)有效,因?yàn)?ResourceOwnerClient 和 MVC 用戶都可以成功地通過(guò) MVCClient 進(jìn)行身份驗(yàn)證。然而,我有一個(gè)警告:當(dāng)我從 MVC 端對(duì)用戶進(jìn)行身份驗(yàn)證時(shí),我注意到我當(dāng)前的用戶中有兩個(gè)身份。兩者在聲明等方面都是相同的。這只發(fā)生在我在 MVCClient 中設(shè)置斷點(diǎn)時(shí),在 IdentityServer 上只有一個(gè)身份。在 IdentityServer 上,我注冊(cè)了一個(gè) UserClaimsPrincipalFactory,它將我自己的自定義聲明添加到 ClaimsIdentity。在 IdentityServer 上的兩個(gè)身份中,我可以看到重復(fù)的聲明。因此,我看到的不是一個(gè)身份和兩個(gè)自定義聲明,而是兩個(gè)身份,每個(gè)身份都有 4 個(gè)自定義聲明。我的 UserClaimsPrincipalFactory 中的 CreateAsync 方法也被單次登錄擊中 5 次。雖然這種行為很奇怪,但它似乎沒(méi)有任何負(fù)面影響。但這只是我正在構(gòu)建的更大應(yīng)用程序的概念證明,我擔(dān)心我將來(lái)可能會(huì)因此遇到問(wèn)題。如果有人以前嘗試過(guò)這種事情,或者知道為什么會(huì)發(fā)生這種行為,我們將不勝感激。
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

雖然這種設(shè)計(jì)不會(huì)發(fā)生任何不好的事情,但我會(huì)完全改造它。為什么?因?yàn)槟诨旌?aClient和 an ApiResource,它們應(yīng)該在邏輯上分開(kāi)。AClient是一個(gè)應(yīng)用程序,一些用戶與之交互的東西,即使它是一個(gè)無(wú)頭的應(yīng)用程序(即自動(dòng)化服務(wù));而 anApiResource由提供給 Clients 的資源組成,因此沒(méi)有用戶可以直接與其交互。


您可以針對(duì) IdentityServer 添加兩種身份驗(yàn)證,一種作為 API(并將其添加為JwtBearer),另一種作為客戶端(并將其添加為Cookies)。然后,您可以根據(jù)該動(dòng)作/控制器的功能使用[Authorize(AuthenticationSchemes = "JwtBearer")]和。= "Cookies"


撇開(kāi)這一點(diǎn)不談,問(wèn)題是您的應(yīng)用程序正在為 MVC 端獲取一個(gè)身份,而為 API 端獲取一個(gè)身份,因?yàn)樗鼰o(wú)法告訴您想要哪個(gè)身份。


只要你有一個(gè)想法,這就是我的一個(gè)帶有 ASP.NET Core Identtiy 的 IdentityServer 的樣子,你可以使用 UI 登錄它,還可以使用 JwtToken 訪問(wèn) REST 端點(diǎn):


services

    .AddAuthentication(options =>

    {

        options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;

        options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;

        options.DefaultSignInScheme = IdentityConstants.ExternalScheme;

    })

    .AddIdentityServerAuthentication(JwtBearerDefaults.AuthenticationScheme, options =>

    {

        options.Authority = Configuration["IdentityServerUrl"];

        options.ApiName = Configuration["ApiName"];


        options.RequireHttpsMetadata = false;

    })

    .AddCookie(IdentityConstants.ApplicationScheme, o =>

    {

        o.LoginPath = new PathString("/Account/Login");

        o.Events = new CookieAuthenticationEvents()

        {

            OnValidatePrincipal = SecurityStampValidator.ValidatePrincipalAsync

        };

    })

    .AddCookie(IdentityConstants.ExternalScheme, o =>

    {

        o.Cookie.Name = IdentityConstants.ExternalScheme;

        o.ExpireTimeSpan = TimeSpan.FromMinutes(5.0);

    })

    .AddCookie(IdentityConstants.TwoFactorRememberMeScheme, o =>

    {

        o.Cookie.Name = IdentityConstants.TwoFactorRememberMeScheme;

    })

    .AddCookie(IdentityConstants.TwoFactorUserIdScheme, o =>

    {

        o.Cookie.Name = IdentityConstants.TwoFactorUserIdScheme;

        o.ExpireTimeSpan = TimeSpan.FromMinutes(5.0);

    });


查看完整回答
反對(duì) 回復(fù) 2022-10-15
  • 1 回答
  • 0 關(guān)注
  • 164 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)