Ainda está conectado ao site MVC, mas não pode chamar a API da web
Eu tenho um site ASP.NET MVC, host IdentityServer4 e uma API da Web.
Quando entro no site MVC, usando um provedor externo (Facebook), estou logado corretamente. No site MVC, também posso consumir a API da web corretament
o entanto, no dia seguinte, ainda estou logado no site MVC, mas quando tento acessar a API da Web, recebo uma 'exceção não autorizada'.
Embora eu ainda esteja logado no site MVC, não estou mais autenticado para chamar uma API da Web a partir do site MV
Estou imaginando como lidar com essa situação e como o IdentityServer4 deve ser configurad
Por que ainda estou logado no site MVC um dia depois? Como isso pode ser configurado?Por que ainda não consigo ligar para a API da web se ainda estiver logado no site MVC?Posso sincronizar os prazos de validade? Ou como devo lidar com isso?O aplicativo MVC está configurado como:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = mgpIdSvrSettings.Authority;
options.RequireHttpsMetadata = false;
options.ClientId = mgpIdSvrSettings.ClientId;
options.ClientSecret = mgpIdSvrSettings.ClientSecret; // Should match the secret at IdentityServer
options.ResponseType = "code id_token"; // Use hybrid flow
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("mgpApi");
options.Scope.Add("offline_access");
});
Então está usando fluxo híbrido.
In IdentityServer, o cliente MVC está configurado como:
new Client
{
EnableLocalLogin = false,
ClientId = "mgpPortal",
ClientName = "MGP Portal Site",
AllowedGrantTypes = GrantTypes.Hybrid,
// where to redirect to after login
RedirectUris = mgpPortalSite.RedirectUris,
// where to redirect to after logout
PostLogoutRedirectUris = mgpPortalSite.PostLogoutRedirectUris,
// secret for authentication
ClientSecrets = mgpPortalSite.ClientSecrets.Select(cs => new Secret(cs.Sha256())).ToList(),
AllowedScopes = new List<string>
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"mgpApi"
},
AllowOfflineAccess = true,
RequireConsent = false,
},
E finalmente a API da web:
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = mgpIdSvrSettings.Authority;
options.RequireHttpsMetadata = false;
options.ApiName = mgpIdSvrSettings.ApiName;
options.EnableCaching = true;
options.CacheDuration = TimeSpan.FromMinutes(10);
});