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);
});
- 1 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報(bào)