【问题标题】:IdentityServer3 - 401 Unauthorized when calling Identity API ControllerIdentityServer3 - 调用身份 API 控制器时出现 401 未授权
【发布时间】:2017-08-06 10:56:16
【问题描述】:

我有一个项目使用 IdentityServer3 进行身份验证即服务。

最近,我的任务是为最终用户创建无缝体验以编辑其身份信息。

我通过在我的应用程序中创建一个 API 控制器来做到这一点,它使用 HTTPClient 来调用位于我的 IdentityServer 项目中的另一个 API 控制器。它基本上向世界公开身份管理方法,但将任何请求“传递”到 IdentityServer Api。

在我调用 IdentityServer Api 控制器之前,一切都很好。无论是否存在“授权”属性,我的断点都不会被命中。我最终从 IdentityServer Api 控制器收到“401:未经授权”。

我尝试重用原始请求的 Auth 标头,但没有奏效。我还试图从我的声明原则中找到一个“access_token”声明,但没有找到。

这是一个代码sn-p:

            var httpClient = new HttpClient();

            // this didn't work - tried reusing the auth from the original request
            //httpClient.DefaultRequestHeaders.Authorization = request.Headers.Authorization;

            // this didn't work either - "access_token" is not found 
            //httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", Caller.FindFirst("access_token").Value);
            var routePrefix = GetRoutePrefix();

            var response = await httpClient.PostAsync(
                       $"{routePrefix}/post",
                       new ObjectContent(typeof(TDObj), entity, new JsonMediaTypeFormatter()));

            return response;

我是 IdentityServer3 和 OAuth 的新手,不知道下一步该做什么。我尝试为“身份”创建一个新的范围,并尝试在我的客户端应用程序中使其成为必需的范围,但这似乎没有奏效。我知道我在这里缺少一些关键的理解,但是 IdentityServer 的文档太多了,我不知道从哪里开始,也找不到任何特定于这个需求的东西。我在杂草丛中!谁能帮我理解这里发生了什么?谢谢!

【问题讨论】:

  • 我最终尝试获取访问令牌并在我的 HttpClient 上调用 SetBearerToken()。我成功收到了令牌,但在我的 Identity Api 控制器中的断点被命中之前我仍然收到 401。我正在检查我的日志,但最后一个日志条目以它成功验证了我的令牌请求并用令牌响应结束,在日志中没有发现任何关于 401 错误的信息。我发现了这个类似的帖子,但没有得到任何结果:stackoverflow.com/questions/33480517/…

标签: c# api authentication oauth-2.0 identityserver3


【解决方案1】:

我在这里按照 Scott Brady 的回答得到了它:Identity Server and web api for user management

但是,他的回答并没有立即对我有用。我必须确保在 api 路由映射发生之前调用 UseIdentityServerTokenValidation。

话虽如此,我最初尝试从我的前端应用程序的入站 HTTPRequest 劫持授权标头是有效的,因此我能够删除任何请求访问令牌的代码,而不必使用 SetBearerToken()在我的 HttpClient 上。就是这样:

httpClient.DefaultRequestHeaders.Authorization = request.Headers.Authorization;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2016-02-02
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多