【发布时间】:2021-09-30 12:20:42
【问题描述】:
我已经检查了关于 SO 的大部分问题,但没有找到我的答案。
我正在尝试从身份服务器获取 JWT 令牌。
方法如下:
var discoveryDocument = new DiscoveryDocumentRequest
{
Address = "https://admin.blabla.app:5000/",
Policy =
{
RequireHttps = false
}
};
var auth = httpClient.GetDiscoveryDocumentAsync(discoveryDocument).Result;
我得到的错误是An invalid request URI was provided. The request URI must either be an absolute URI or BaseAddress must be set.
DiscoveryDocumentRequest
{
"Policy": {
"LoopbackAddresses": [
"localhost",
"127.0.0.1"
],
"Authority": "https://admin.blabla.app:5000",
"AuthorityValidationStrategy": {},
"RequireHttps": false,
"AllowHttpOnLoopback": true,
"ValidateIssuerName": true,
"ValidateEndpoints": true,
"EndpointValidationExcludeList": [],
"AdditionalEndpointBaseAddresses": [],
"RequireKeySet": true
},
"Address": "https://admin.blabla.app:5000/",
"ClientId": null,
"ClientSecret": null,
"ClientAssertion": {
"Type": null,
"Value": null
},
"ClientCredentialStyle": 1,
"AuthorizationHeaderStyle": 0,
"Parameters": [],
"Version": {
"Major": 1,
"Minor": 1,
"Build": -1,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
},
"Content": null,
"Method": {
"Method": "GET"
},
"RequestUri": null,
"Headers": [
{
"Key": "Accept",
"Value": [
"application/json"
]
}
],
"Properties": {}
}
此代码在 Windows 服务上。
有趣的事实:相同的代码适用于不同的 Windows 机器。为什么?可能是什么问题?
【问题讨论】:
-
嗨 @Gerald,检查 HttpClient 的 source code 表明如果提供的 uri 为 null 并且 httpclient 的 BaseAddress 属性为 null,或者提供的 uri 是相对 uri 并且 BaseAdress属性为空。所以我认为在你的代码(或 IdentityModel 的代码)的某个地方,HttpClient 正在接收一个空 uri 或一个相对 uri,而 BaseAdress 属性为空。
-
您能否分享错误的完整堆栈跟踪。它可能有助于查明问题的根源并确定它是您的代码还是 IdentityModel 的代码的问题。
-
嗨@Gerald Hughes,从错误消息看来,请求网址不正确。我想你可以先用 fiddler 来检查请求的 url。
-
根据您共享的 DiscoveryDocumentRequest,“RequestUri”为空。不确定调用它时 httpClient 的“BaseAddress”字段是否有值。如果 httpClient.BaseAddress 也没有值,那么肯定会抛出错误,因为在评估期间会发现 'RequestUri' 和 BaseAddress 都为 null。
标签: c# .net windows-services asp.net-core-webapi identityserver4