ASP.NET Core 2.2의 Azure AD 인증

DeveloperExceptionError

현재 ASP.NET Core 2.2 웹 API를 기존 Azure AD에 연결하는 데 어려움을 겪고 있습니다. 저는 ASP.NET Core 팀 의이 샘플 코드기반으로 구성 했습니다. 쿠키는 JWT로 대체되었습니다.

메타 데이터 주소에서 문서를 검색 할 수 없습니다.

이제 다음과 같은 오류 메시지가 나타납니다.

IOException: IDX10804: Unable to retrieve document from: {MetadataAdress}.

- Microsoft.IdentityModel.Protocols.HttpDocumentRetriever+<GetDocumentAsync>d__8.MoveNext()
- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
- System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
- Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever
      +<GetAsync>d__3.MoveNext()
- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
- System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
- Microsoft.IdentityModel.Protocols.ConfigurationManager+<GetConfigurationAsync>d__24.MoveNext()

URL을 직접 호출하면 구성 파일과 함께 즉각적인 응답을받습니다. 그러나 코드는 그것을 할 수없는 것 같습니다. 이유가 무엇인지 잘 모르겠습니다.

Azure AD 구성 구문

이 문제의 가장 가능성있는 원인은 구성 실수입니다. 필드의 구문을 잘못했거나 중요한 값이 누락되었을 수 있습니다.

연결 정보 필드

연결 정보 필드는 다음과 같이 제공됩니다.

    TenantId:     {Tenant-GUID}
    Authority:    https://login.microsoftonline.com/{TenantId}
    Resource:     https://{resource-endpoint}.{resource-domain}
    ClientId:     {Client-GUID}
    ClientSecret: {ClientSecret}

서비스 구성

의 인증 서비스 구성은 Startup.cs다음과 같습니다.

    services
        .AddAuthentication(options => {  
             options.DefaultScheme          = JwtBearerDefaults.AuthenticationScheme;
             options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddJwtBearer()
        .AddOpenIdConnect(options => {
            options.ClientId             = this.ClientId;
            options.ClientSecret         = this.ClientSecret;
            options.Authority            = this.Authority;
            options.Resource             = this.Resource;
            options.ResponseType         = OpenIdConnectResponseType.CodeIdToken;
            options.SignedOutRedirectUri = "/signed-out";
            options.Events               = new OpenIdConnectEvents()
            {
                OnAuthorizationCodeReceived = async context =>
                {
                    var request = context.HttpContext.Request;
                    var currentUri = UriHelper.BuildAbsolute(
                        request.Scheme, request.Host, request.PathBase, request.Path
                    );
                    var credentials = new ClientCredential(this.ClientId, this.ClientSecret);
                    var authContext = new AuthenticationContext(
                        this.Authority,
                        AuthPropertiesTokenCache.ForCodeRedemption(context.Properties)
                    );

                    var result = await authContext.AcquireTokenByAuthorizationCodeAsync(
                        context.ProtocolMessage.Code,
                        new System.Uri(currentUri),
                        credentials,
                        this.Resource
                    );

                    context.HandleCodeRedemption(result.AccessToken, result.IdToken);
                 }
             };

             // Custom
             options.MetadataAddress      = $"{this.Authority}/federationmetadata/2007-06/federationmetadata.xml";
             options.RequireHttpsMetadata = false; // Dev env only
        }

기존 API

이 Azure AD에 연결하는 기존 웹 API가 많이 있습니다. 슬프게도 그들은 모두 완전한 .NET Framework를 사용하고 있습니다. 그들은 사용 UseWindowsAzureActiveDirectoryBearerAuthentication로부터 방법 Microsoft.Owin.Security.ActiveDirectory네임 스페이스의를 WindowsAzureActiveDirectoryBearerAuthenticationExtensions.

그들이 사용하는 또 다른 것은 HostAuthenticationFilter인증 유형이 Bearer.

질문

무엇이 문제입니까?

이 문제를 어떻게 해결할 수 있습니까?

이러한 구성 요소를 함께 사용하려면 어떻게해야합니까?

  • ASP.NET Core 2.2
  • JWT 베어러 인증
  • Azure AD (토큰 유효성 검사 + 클레임 추출 전용-생성은 다른 서비스에서 처리됨)
DeveloperExceptionError

문제의 원인

몇 가지 테스트 후 문제를 식별 할 수있었습니다. 분명히이 문제의 주요 원인은 네트워크 관련이었습니다. 우리 회사에서 무제한 네트워크로 전환했을 때 인증이 성공했습니다.

수정

프록시를 구성 JwtBearer하고 OpenIdConnect미들웨어에 제공해야했습니다 . 이것은 다음과 같습니다.

var proxy = new HttpClientHandler
{
    Proxy = new WebProxy("{ProxyUrl}:{ProxyPort}") { UseDefaultCredentials = true; },
    UseDefaultCredentials = true
};

services
    .AddJwtBearer(options => {
        // ... other configuration steps ...
        options.BackchannelHttpHandler = proxy;
    })
    .AddOpenIdConnect(options => {
        // ... other configuration steps ...
        options.BackchannelHttpHandler = proxy;
    })

메타 데이터 주소

@astaykov는 메타 데이터 주소가 실제로 올바르지 않다는 것이 옳았습니다. 이 느낌도 있었지만 이전 API가 성공적으로 실행 되었기 때문에 유지했습니다. 문제 테스트 중에도 제거했지만 네트워크 문제로 인해 차이가 발생하지 않았습니다.

네트워크 문제가 해결 된 후 기본 메타 데이터 주소 사용이 작동했습니다. 다른 인증 스키마를 사용할 때 예상대로 사용자 지정 실패했습니다.

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

How to redirect after Azure AD authentication to different controller action in ASP Net Core MVC

分類Dev

Azure WebApp Asp.NET Core 2 error: An error occurred while starting the application

分類Dev

ASP.NET Core 2AuthenticationSchemes

分類Dev

Asp.Net Core 2 Complex TagHelper

分類Dev

C#ASP.NET Core 2 HashAlgorithm

分類Dev

HtmlSanitizer + ASP.NET Core 2 with DI

分類Dev

Asp.Net Core Azure AD V1.0JWT認証の無効な署名

分類Dev

Azure ADとAzure AD B2CとAzure AD B2B

分類Dev

Azure ADとAzure AD B2CとAzure AD B2B

分類Dev

Azure AD B2C and Azure AD Connect

分類Dev

Custom Role with .NET Core 3 Azure AD Authentication

分類Dev

ASP.NET Core 2、jQueryPOSTデータnull

分類Dev

AJAX paramter to ASP .NET Core 2 Controller Action

分類Dev

ASP.NET CORE 2 IdentityUserPOCOエラー

分類Dev

What is difference between View and Page in Asp.net core 2?

分類Dev

C# ASP.NET Core 2 HashAlgorithm

分類Dev

ASP.NET Core2 +のILoggerとDependencyInjection

分類Dev

ASP.NET Core2のweb.config

分類Dev

web.config in ASP.NET Core 2

分類Dev

Adding Angular Material to Asp.Net Core 2 SPA

分類Dev

ASP.NET Core 2:UserManagerとDbContext

分類Dev

Web APIのAuthorizeAttribute(ASP.NET Core 2)

分類Dev

ASP.NET Core:Azure AD B2Cセルフサービスパスワードのリセット(サインアップ/サインインポリシー)

分類Dev

ASP.NET Core 2 MVC + EF Core2またはAngular5

分類Dev

Azure AD-.Net Core 2-どうすれば2つの異なるクライアントIDを使用できますか?

分類Dev

Azure AD 2FA API Endpoints

分類Dev

Asp.net Core 2-Asp.net Core2.0でServiceLocatorを使用する方法

分類Dev

ASP.NET Core 2.0 Web API Azure Adv2トークン認証が機能しない

分類Dev

ASP.NET Core2-セキュリティロールにマッピングされていないADグループ

Related 関連記事

  1. 1

    How to redirect after Azure AD authentication to different controller action in ASP Net Core MVC

  2. 2

    Azure WebApp Asp.NET Core 2 error: An error occurred while starting the application

  3. 3

    ASP.NET Core 2AuthenticationSchemes

  4. 4

    Asp.Net Core 2 Complex TagHelper

  5. 5

    C#ASP.NET Core 2 HashAlgorithm

  6. 6

    HtmlSanitizer + ASP.NET Core 2 with DI

  7. 7

    Asp.Net Core Azure AD V1.0JWT認証の無効な署名

  8. 8

    Azure ADとAzure AD B2CとAzure AD B2B

  9. 9

    Azure ADとAzure AD B2CとAzure AD B2B

  10. 10

    Azure AD B2C and Azure AD Connect

  11. 11

    Custom Role with .NET Core 3 Azure AD Authentication

  12. 12

    ASP.NET Core 2、jQueryPOSTデータnull

  13. 13

    AJAX paramter to ASP .NET Core 2 Controller Action

  14. 14

    ASP.NET CORE 2 IdentityUserPOCOエラー

  15. 15

    What is difference between View and Page in Asp.net core 2?

  16. 16

    C# ASP.NET Core 2 HashAlgorithm

  17. 17

    ASP.NET Core2 +のILoggerとDependencyInjection

  18. 18

    ASP.NET Core2のweb.config

  19. 19

    web.config in ASP.NET Core 2

  20. 20

    Adding Angular Material to Asp.Net Core 2 SPA

  21. 21

    ASP.NET Core 2:UserManagerとDbContext

  22. 22

    Web APIのAuthorizeAttribute(ASP.NET Core 2)

  23. 23

    ASP.NET Core:Azure AD B2Cセルフサービスパスワードのリセット(サインアップ/サインインポリシー)

  24. 24

    ASP.NET Core 2 MVC + EF Core2またはAngular5

  25. 25

    Azure AD-.Net Core 2-どうすれば2つの異なるクライアントIDを使用できますか?

  26. 26

    Azure AD 2FA API Endpoints

  27. 27

    Asp.net Core 2-Asp.net Core2.0でServiceLocatorを使用する方法

  28. 28

    ASP.NET Core 2.0 Web API Azure Adv2トークン認証が機能しない

  29. 29

    ASP.NET Core2-セキュリティロールにマッピングされていないADグループ

ホットタグ

アーカイブ