IDX20803:无法从中获取配置

时间:2018-06-07 13:15:29

标签: jwt azure-active-directory asp.net-core-2.1

我知道这个问题已得到解答,但我不明白人们究竟做了什么(关于证书,ssl),他们都使用本地主机而不是我。

我使用此示例作为示例OpenIdConnect

我正在使用:

  • 网络应用
  • 网络API

两者都在使用.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中的每个权限,但这些都不起作用。

如果您需要更多信息,我可以通过在这篇文章中添加它们来提供它们。

5 个答案:

答案 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)

enter image description here

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>