当 API returns 验证失败时重定向到登录

Redirect to login when API returns authentication failure

我有一个 IdentityServer4 和一个 API 的设置,运行 作为同一个项目,还有一个 MVC 客户端。这工作正常但在某些时候客户端调用 API 并且身份验证错误 (401) 是 returned 因为访问令牌不知何故变得无效。在这种情况下,我希望客户端调用服务器上的登录页面,以便用户可以重新输入他们的凭据,然后重定向回客户端。

string accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");
using (HttpClient client = new HttpClient())     
    client.SetBearerToken(accessToken);
    HttpResponseMessage response = await client.GetAsync("http://apiserver/method");
    if (response.IsSuccessStatusCode) {

         string content = await response.Content.ReadAsStringAsync();
         forum = JsonConvert.DeserializeObject<Data>(content);
    } else {
         return Redirect(... url to server login with return URL here ...)
    }
}

我不清楚如何使用正确的路径向服务器生成 url 并查询以正确验证身份并 return 返回客户端。我查看了文档和示例,但 none 似乎解决了这种情况。

我不清楚如何使用正确的路径向服务器生成 url 并查询以正确验证身份并 return 返回客户端。我查看了文档和示例,但 none 似乎解决了这种情况。

当您从 api 获得未经授权的访问状态代码 401 时,您必须先注销用户。通过将它们注销,它将清除 cookie 并将它们也从 oidc 中注销。这会将应用程序重定向到您的登录页面,因为没有 cookie 可以在客户端进行身份验证。

await HttpContext.Authentication.SignOutAsync("Cookies");
await HttpContext.Authentication.SignOutAsync("oidc");

另一种方法是事先检查您的访问令牌是否已过期,即在进行 api 调用之前。这将为您节省额外的 http 调用。但这取决于你的应用需求。