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

时间:2017-03-15 15:33:16

标签: c# api authentication oauth-2.0 identityserver3

我有一个使用IdentityServer3作为Auth即服务的项目。

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

我是通过在我的应用程序中创建一个API控制器来实现的,该控制器使用HTTPClient来调用生活在我的IdentityServer项目中的另一个API控制器。它基本上将身份管理方法暴露给世界,但是"传递"对IdentityServer Api的任何请求。

在我调用IdentityServer Api控制器之前一直都很好。我的断点永远不会受到影响,无论是否存在"授权"属性。我最终收到了#34; 401:未经授权的"从IdentityServer Api控制器返回。

我尝试重复使用原始请求的Auth标头,但这并不起作用。我还试图找到一个" 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的新手,不知道接下来该做什么。我尝试为#34; identity"创建一个新的范围。并尝试在我的客户端应用程序中使其成为必需的范围,但这似乎没有做到这一点。我知道我在这里缺少一些关键的理解,但是IdentityServer有很多文档,我不知道从哪里开始,也找不到任何特定的需求。我在杂草中!谁能帮助我理解这里发生了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

我按照Scott Brady的回答来完成这项工作:Identity Server and web api for user management

然而,他的回答并没有立即为我服务。我必须确保在api路由映射发生之前调用UseIdentityServerTokenValidation。

话虽这么说,我原先尝试从我的前端应用程序的入站HTTPRequest中获取授权标头的工作,所以我能够删除任何请求访问令牌的代码并且不需要SetBearerToken ()在我的HttpClient上。就是这样:

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