【发布时间】: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