IdentityServer3 - 调用 Identity API 控制器时 401 未经授权

IdentityServer3 - 401 Unauthorized when calling Identity API Controller

我有一个项目使用 IdentityServer3 作为身份验证服务。

最近我的任务是为 End-Users 创建无缝体验来编辑他们的身份信息。

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

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

我尝试重用原始请求的 Auth headers,但没有成功。我也试图从我的索赔原则中找到一个 "access_token" 索赔,但没有找到。

这是一个代码片段:

            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 的新手,不确定下一步该做什么。我尝试为 "identity" 创建一个新范围,并试图使其成为我的客户端应用程序中的必需范围,但这似乎并没有起到作用。我知道我在这里缺少一些关键的理解,但是 IdentityServer 的文档太多了,我不知道从哪里开始,也找不到任何特定于此需求的内容。我在杂草丛中!谁能帮我理解这里发生了什么?谢谢!

我按照斯科特·布雷迪 (Scott Brady) 的回答在此处进行了操作:Identity Server and web api for user management

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

也就是说,我最初尝试从我的 Front-End 应用程序的入站 HTTPRequest hi-jack 授权 headers 成功了,所以我能够删除任何请求访问的代码令牌,并且不必在我的 HttpClient 上使用 SetBearerToken()。就是这样:

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