首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >API返回鉴权失败时重定向登录

API返回鉴权失败时重定向登录
EN

Stack Overflow用户
提问于 2017-07-15 23:18:07
回答 1查看 1.2K关注 0票数 1

我有一个IdentityServer4的安装程序和一个应用程序接口,它们作为同一个项目一起运行,还有一个MVC客户端。这可以很好地工作,但在某些情况下,客户端调用API并返回身份验证错误(401),因为访问令牌不知何故变得无效。在这个场景中,我希望客户端调用服务器上的登录页面,以便用户可以重新输入他们的凭据,然后重定向回客户端。

代码语言:javascript
复制
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,以便正确地进行身份验证并返回给客户端。我已经查看了文档和示例,但似乎没有解决此场景的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-17 20:13:11

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

代码语言:javascript
复制
await HttpContext.Authentication.SignOutAsync("Cookies");
await HttpContext.Authentication.SignOutAsync("oidc");

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45119753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档