我有一个身份服务器(IS)的本地实例。我有一个容器应用程序和一个子应用程序,并且该容器应用程序配置了身份服务器。从容器应用程序(URL链接)启动子应用程序。
启动容器应用程序时,可以按预期登录IS。然后,当我通过链接启动子应用程序时,看到相同的ID令牌和访问令牌正在子应用程序上使用。
我想这是预期的。
但是,如果我将子应用程序配置为具有IS,则我希望该子应用程序有一个新的访问令牌,但相反,我会看到与容器应用程序相同的访问令牌。
这是正确的行为还是应该为子应用提供新的访问令牌?
在我的子应用程序上,我有一个具有以下功能的控制器:
if (User.Identity.IsAuthenticated)
{
accessToken = await HttpContext.GetTokenAsync("access_token");
idToken = await HttpContext.GetTokenAsync("id_token");
// Now you can use them. For more info on when and how to use the
// access_token and id_token, see https://auth0.com/docs/tokens
}
控制器具有[Authorize]属性。
Idsrv4配置:
new Client
{
ClientId = "react_main_container_app_implicit",
ClientSecrets = new [] { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.Implicit,
AllowedScopes = new []
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"singlespa_access",
"employee_info"
},
AllowAccessTokensViaBrowser = true,
RedirectUris = new [] { "http://localhost:63580/signin-oidc" }, //mw knows how to handle this.
PostLogoutRedirectUris = new []{"http://localhost:63580/signout-callback-oidc"}
},
new Client
{
ClientId = "react-child_app_implicit",
ClientSecrets = new [] { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.Implicit,
// RequireConsent = true,
AllowedScopes = new []
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"singlespa_access"
},
AllowAccessTokensViaBrowser = true,
RedirectUris = new [] { "http://localhost:5001/signin-oidc" }, //mw knows how to handle this.
PostLogoutRedirectUris = new []{"http://localhost:5001/signout-callback-oidc"}
}
和
services.AddIdentityServer()
.AddDeveloperSigningCredential(true)
.AddInMemoryClients(InMemoryConfiguration.Clients())
.AddInMemoryApiResources(InMemoryConfiguration.ApiResources()) // these are now called scopes. API allowed to use auth server.
.AddInMemoryIdentityResources(InMemoryConfiguration.IdentityResources())
.AddTestUsers(InMemoryConfiguration.Users());
答案 0 :(得分:0)
如果我正确理解这一点,那么您所描述的行为是预期的,并且是由于单点登录作用所致,因为当您使用用户凭据登录到Identity Server 4时,它将离开cookie,然后一旦您的另一个客户端重定向到与身份提供者相同,cookie身份验证方案将启动并自动登录用户并颁发令牌,而无需输入凭据。
但是,如果您的客户端配置了RequireConsent = true
,并且您的应用程序使用了不同的client_id
,则您仍应进入同意屏幕。