API返回身份验证失败时重定向到登录

时间:2017-07-15 15:18:07

标签: identityserver4

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

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以正确进行身份验证并返回客户端。我查看了文档和示例,但似乎没有解决这种情况。

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

1 个答案:

答案 0 :(得分:1)

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

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

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