Да, если результат равен нулю (независимо от того, почему), то вы не можете получить доступ к ресурсу, поэтому вам потребуется новый токен обновления. Единственный способ - заставить пользователя войти снова.
я есть сайт ASP.NET MVC, хост IdentityServer4 и веб-API.
Когда я захожу на сайт MVC, используя внешнего провайдера (Facebook), я вхожу в систему нормально. С сайта MVC я также могу правильно использовать веб-API.
Однако на следующий день я все еще захожу на сайт MVC, но когда я пытаюсь получить доступ к веб-API, я получаю «неавторизованное исключение».
Поэтому, хотя я все еще вошел в систему на сайте MVC, я больше не авторизован для вызова веб-API с сайта MVC.
Мне интересно, как справиться с этой ситуацией, и как IdentityServer4 должен быть настроен.
Почему я все еще захожу на сайт MVC днем позже? Как это можно настроить?Почему я до сих пор не могу вызвать веб-API, если я все еще вошел на сайт MVC?Могу ли я синхронизировать время истечения? Или как мне справиться с этим?Приложение MVC настроено так:
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");
});
Так что он использует гибридный поток.
В IdentityServer клиент MVC настроен так:
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,
},
И, наконец, веб-API:
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = mgpIdSvrSettings.Authority;
options.RequireHttpsMetadata = false;
options.ApiName = mgpIdSvrSettings.ApiName;
options.EnableCaching = true;
options.CacheDuration = TimeSpan.FromMinutes(10);
});