Да, если результат равен нулю (независимо от того, почему), то вы не можете получить доступ к ресурсу, поэтому вам потребуется новый токен обновления. Единственный способ - заставить пользователя войти снова.

я есть сайт 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);                    
            });

Ответы на вопрос(1)

Ваш ответ на вопрос