我有一个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以正确进行身份验证并返回客户端。我查看了文档和示例,但似乎没有解决这种情况。
答案 0 :(得分:1)
当您从api获得未经授权的访问状态代码401时,您必须先将用户注销。通过记录它们,它将清除cookie并将其从oidc中签出。这会将应用程序重定向到您的登录页面,因为客户端上不会有cookie进行身份验证。
await HttpContext.Authentication.SignOutAsync("Cookies");
await HttpContext.Authentication.SignOutAsync("oidc");
另一种方法是在进行api调用之前检查您的访问令牌是否已经过期。这将为您节省额外的http电话。但这取决于您的应用要求。