我知道这个问题已得到解答,但我不明白人们究竟做了什么(关于证书,ssl),他们都使用本地主机而不是我。
我使用此示例作为示例OpenIdConnect
我正在使用:
两者都在使用.Net Core 2.1。 Web App使用Azure AD连接来获取发送到API的JwtBearer令牌。
在API中查看路由 $http({
method: 'GET',
dataType: 'json',
url: 'https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=malaria&format=json',
}).then(function (success) {
$scope.magazineList = success.data.resultList.result;
}, function (error) {
alert(error);
});
,会从Web App向API发送请求,API将返回上述错误。
确切的错误是:
/api/information
所以我尝试通过添加证书,添加必要的库(System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://<mycompany>.onmicrosoft.com/<big Guid of 72 chars>/.well-known/openid-configuration'.
v4.3.3)来解决此错误,检查Azure AD中的每个权限,但这些都不起作用。
如果您需要更多信息,我可以通过在这篇文章中添加它们来提供它们。
答案 0 :(得分:3)
如果有人遇到此问题并且正在使用Azure B2C,则该实例是您的Azure B2C租户的根URL。例如https://myroot.b2clogin.com/。域应为:myroot.onmicrosoft.com /
确保域中没有https。
这对我有用。
答案 1 :(得分:2)
通过替换appsettings.json
:
"AzureAd": {
"Instance": "<APP_Uri_from_Azure_Portal>",
...
}
要
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
...
}
答案 2 :(得分:0)
@juunas在上面的评论之一中提到,身份验证处理程序在启动时会加载此配置文件,以加载其配置以验证身份提供者提供的令牌。
文件路径终点也可以在“应用程序注册”部分中找到。如果您转到应用程序注册=>概述=>端点,然后查找OpenID Connect配置端点(v2)
B2C身份验证处理程序的Startup.cs代码如下所示,我已在appsettings中提供了值
static bool LoadBMP( const char* fileName ) {
FILE* file;
unsigned char header[54];
unsigned int dataPos;
unsigned int size;
unsigned int width, height;
unsigned char* data;
file = fopen( fileName, "rb" );
if ( file == NULL ) {
//MessageBox(NULL, L"Error: Invaild file path!", L"Error", MB_OK);
return false;
}
if ( fread( header, 1, 54, file ) != 54 ) {
//MessageBox(NULL, L"Error: Invaild file!", L"Error", MB_OK);
return false;
}
if ( header[0] != 'B' || header[1] != 'M' ) {
//MessageBox(NULL, L"Error: Invaild file!", L"Error", MB_OK);
return false;
}
dataPos = *(int*) &( header[0x0A] );
size = *(int*) &( header[0x22] );
width = *(int*) &( header[0x12] );
height = *(int*) &( header[0x16] );
if ( size == NULL )
size = width * height * 3;
if ( dataPos == NULL )
dataPos = 54;
data = new unsigned char[size];
fread( data, 1, size, file );
for ( unsigned int i = 0; i < size; i += 3 ) {
unsigned char red = data[i];
data[i] = data[i + 2];
data[i + 2] = red;
}
fclose( file );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data );
delete data;
return true;
}
答案 3 :(得分:0)
通过在Startup-->Configure
中添加以下代码解决了该问题ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
答案 4 :(得分:0)
对我来说,问题与防火墙/网络有关 - 当我在浏览器中输入 /.well-known/openid-configuration URL 时,我可以访问它,但 API 本身不能(API 和身份服务器正在托管在同一个应用程序中)。 API 托管在 Azure 中,我创建了一个出站安全规则(针对与子网关联的网络安全组,该子网已集成到 API 所属的应用程序服务计划中),以防止 API 调用任何其他应用程序其应用程序服务计划中的服务,包括其自身。添加一个新的出站安全规则以允许解决我的问题(我意识到这导致了与提交者非常相似的错误,但出于不同的原因,而且更像是一种边缘情况 - 很可能没有设置此类限制)。< /p>