我有一个使用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有很多文档,我不知道从哪里开始,也找不到任何特定的需求。我在杂草中!谁能帮助我理解这里发生了什么?谢谢!
答案 0 :(得分:0)
我按照Scott Brady的回答来完成这项工作:Identity Server and web api for user management
然而,他的回答并没有立即为我服务。我必须确保在api路由映射发生之前调用UseIdentityServerTokenValidation。
话虽这么说,我原先尝试从我的前端应用程序的入站HTTPRequest中获取授权标头的工作,所以我能够删除任何请求访问令牌的代码并且不需要SetBearerToken ()在我的HttpClient上。就是这样:
httpClient.DefaultRequestHeaders.Authorization = request.Headers.Authorization;