>

Azure Active Directory에 대해 인증을 사용하여 Visual Studio 2019에서 간단한 기본 제공 ASP.NET Core MVC 앱을 설정하면 OpenID-Connect를 사용하는 동안 암시 적 OAuth2 흐름이 발생합니다.

이 내용은 입니다. 여기 .

방금 테스트 한 결과 인증 코드 흐름에 필수적인 클라이언트 시크릿을 처리 할 필요가 없었으므로 위의 내용이 사실이라고 가정합니다.

반면에 문서 암시 적 흐름의 사용은 권장되지 않습니다 :

The implicit grant presents more risks than other grants, [...] If you are developing a Web application that includes a backend, and consuming an API from its backend code, the implicit flow is also not a good fit.

상황을 혼동시키기 위해 웹 애플리케이션이 인증 코드 흐름을 사용하고 있다고 언급 된이 문서 :

The OAuth 2.0 authorization code flow is described in section 4.1 of the OAuth 2.0 specification. It's used to perform authentication and authorization in the majority of app types, including web apps and natively installed apps.

발생하는 질문은

  • 암시 적 흐름이 잘못된 선택으로 간주되는 경우 왜 ASP.NET Core MVC 미들웨어에서 사용됩니까?
  • 행동을 바꿀 수 있습니까?
  • 있는 경우 Azure AD의 앱 등록에서 클라이언트 비밀번호를 어디서 어떻게 얻을 수 있습니까?
  • 답변 # 1

    당신의 관찰은 불행히도 유효합니다.

    제공된 샘플은 암시 적 흐름을 사용합니다. 나는 단순함을 짐작할 것이다. 최신 샘플의 구성 스크립트에서 확인할 수 있습니다.

    암시 적 흐름에 관한 모든 진술은 정확하다. 의견에서 하나를 포함합니다.

    그러나 OpenID Connect를 사용하는 ASP.NET Core 프로젝트의 기본 스캐 폴딩은 실제로는인증이 아닌인증만 수행한다는 점에주의해야합니다. 또한 외부 API에 대한 호출도 수행하지 않습니다. 그런 의미에서 암시 적 흐름은 단지 id_token 를 얻기 위해 사용됩니다 그러나 access_token 는 아닙니다 . 전자는 사용자 프로필 정보를 포함하고 있으며 보안 위험이 없습니다. 후자는 특정 자원에 액세스하기위한 권한 부여 데이터를 포함합니다. 따라서 id_token 자체는 유출 될 때 보안 위험을 유발하지 않습니다. 예, 누출 된 경우 데이터 누출이 발생하지만 보안은 아닙니다.

    여기에 더 완전한 샘플이 있습니다. 흐름을 대신하여 access_token 를 얻는 것  외부 서비스를 호출합니다. 여전히 전체 인증 코드의 그랜드 플로우는 아니지만 대신 플로우입니다. 후자는 훨씬 더 안전합니다.

    일반적으로 .NET Core의 OpenIDConnect 구현에는 AuthorizationCodeRecieved 이벤트에서 볼 수있는 인증 코드 처리를위한 구현이 있습니다. OpenIDConnectEvents 속성을 정의하여 OpenIdConnectOptions 객체를 생성 할 때 사용할 수 있습니다.

    솔직히, 프로젝트 스캐 폴드가 왜 그렇게 설계되어 있는지 묻기 위해 많은 관심을 끌지 않을 것이고, 또한 그것을 바꾸지 않을 것입니다. 이전 구현 (.net 4.5 정도)이 기본적으로 AuthZ 코드를 사용하고 있다고 확신합니다. 이것이 왜 바뀌 었는지 확실하지 않습니다. 아마도 구현의 마찰과 샘플에 대한 이해를 낮추는 것입니다.

    그러나 ID 코드를 얻기 위해 인증 코드를 사용하는 IMO는 약간 과잉입니다.

    댓글 주소 지정

    1) 엉망이라고 동의한다. 권한 부여 속성은인증 된사용자를 확인하는 것 외에는 아무것도하지 않습니다. 특정 역할을 확인하도록 구성 할 수도 있습니다. 그러나 그때도 그 역할은 id_token 에서 추출됩니다. . access_token 가 없기 때문에  웹앱의 경우. 내 요점은 간단한 웹 응용 프로그램 (프론트 엔드, 백엔드-컨트롤러 또는 ASPX 페이지)을 처리 할 때 id_tokens 만 다루고 액세스 토큰은 다루지 않는 것입니다. 이러한 맥락에서 암묵적인 흐름은 코드 복잡성을 크게 줄입니다.

    문서는 GitHub에서 공개 소스로 제공되며 책임있는 프로그래머라면 개선을 제안하거나 문제를 나타낼 수있는 자유가 있습니다. StackOverflow는 기술적 인 질문과 답변을위한 것이며 소프트웨어 설명서에 대한 불만은 아닙니다.

  • 이전 Android command line - 안드로이드 커맨드 라인 - 단일 단위 테스트 방법을 실행하는 방법
  • 다음 java - 기기에 현지화가 표시되지 않습니다