#identityserver4
#identityserver4
Вопрос:
Я провожу проверку концепции, представляя OpenID Connect в нашем наборе продуктов. После долгих обсуждений мы решили, что, вероятно, было бы лучше иметь отдельное, незаметное приложение Javascript (Vuejs) для каждого продукта, а не включать их все в один монолитный SPA.
Для того, чтобы это сработало, нам действительно нужен единый вход («Единый вход»). Я использую IdentityServer 4 в качестве нашего IDP.
Кажется, я добился некоторого разумного успеха, предоставив несколько uri для RedirectUris
свойства соответствующей конфигурации клиента Idp. Таким образом, оба приложения фактически являются одним и тем же клиентом.
Это кажется неправильным, и я хочу проверить, правильно ли я это делаю.
Вот моя конфигурация для конфигурации клиента, которая охватывает 2 SPA (которая будет охватывать все SPA).
new Client
{
ClientName = "Some App",
ClientId = "appsuiteid",
AccessTokenLifetime = 330,// 330 seconds, default 60 minutes
IdentityTokenLifetime = 300,
AllowOfflineAccess = true,
RefreshTokenUsa&e = TokenUsa&e.ReUse,
RefreshTokenExpiration = TokenExpiration.Slidin&,
UpdateAccessTokenClaimsOnRefresh = true,
RequireClientSecret = false,
AllowedGrantTypes = GrantTypes.Code,
AllowAccessTokensViaBrowser = true,
RedirectUris = new List<strin&&&t;
{
"http://localhost:8080/authcallback.html", <-- first 2 Uris for first SPA
"http://localhost:8080/silent-refresh.html",
"http://localhost:8090/authcallback.html", <-- second 2 Uris for second SPA
"http://localhost:8090/silent-refresh.html",
},
PostLo&outRedirectUris = new List<strin&&&t;
{
"http://localhost:8080/si&nout-callback-oidc",
"http://localhost:8090/si&nout-callback-oidc",
},
AllowedCorsOri&ins = new List<strin&&&t;
{
$"http://localhost:8080",
$"http://localhost:8090",
},
AllowedScopes = new List<strin&&&t;
{
IdentityServer4.IdentityServerConstants.StandardScopes.OpenId,
IdentityServer4.IdentityServerConstants.StandardScopes.Profile,
},
ClientSecrets = { new Secret("somepwd".Sha256())}
}
Обратите внимание, что если я настрою отдельный клиент для каждого SPA, это не сработает, поскольку каждый SPA перенаправляется на отдельную страницу согласия для этого клиента — таким образом, теряется требуемая характеристика единого входа.
Любые рекомендации по этому поводу были бы замечательными.
Спасибо
Комментарии:
1. Вы фактически (один) вошли в систему, даже если вам нужно дать согласие. Почему бы просто не исключить согласие?
2. @spren&o спасибо. Да, до меня дошло, что мне на самом деле не нужен экран согласия. Итак, у меня могут быть отдельные клиентские конфигурации для моих клиентов, и как только я войду в систему, это заработает для всех моих клиентов. Я отвечу на свой собственный вопрос для других.