Сервер идентификации архитектуры мышления 4 и единый вход

#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 спасибо. Да, до меня дошло, что мне на самом деле не нужен экран согласия. Итак, у меня могут быть отдельные клиентские конфигурации для моих клиентов, и как только я войду в систему, это заработает для всех моих клиентов. Я отвечу на свой собственный вопрос для других.