관용적인 .NET 규칙을 따르는 동안 Auth0.NET을 프로젝트에 통합하는 것은 번거로울 수 있으며 프로젝트 간에 공유되는 상당한 양의 상용구가 포함될 수 있습니다.
이 라이브러리는 다음 기능을 통해 이 문제를 해결하기를 희망합니다.
Microsoft.Extensions.DependencyInjection
에 대한 확장입니다.
관리 API와 자체 REST 및 Grpc 서비스에 대한 자동 액세스 토큰 캐싱 및 갱신
내부 HTTP 처리기의 중앙 집중식 확장성과 관리를 위한 HttpClientFactory 통합.
IHttpClientBuilder
확장은 나가는 요청에 액세스 토큰을 자동으로 추가하는 처리기를 제공합니다.
이 라이브러리는 모든 .NET Standard 2.0 런타임(.NET 8+ 권장)과 호환되며 ASP.NET Core 및 독립 실행형 .NET 일반 호스트 애플리케이션에 사용하기에 적합합니다.
프로젝트에 Auth0Net.DependencyInjection
을 추가합니다.
Install-Package Auth0Net.DependencyInjection
단순히 AuthenticationApiClient
만 사용하고 다른 것은 사용하지 않는 경우 AddAuth0AuthenticationClientCore
호출하고 Auth0 도메인을 전달할 수 있습니다. 이 통합은 간단하며 이 라이브러리의 다른 기능을 지원하지 않습니다.
services . AddAuth0AuthenticationClientCore ( "your-auth0-domain.auth0.com" ) ;
그런 다음 클래스 내에서 IAuthenticationApiClient
를 요청할 수 있습니다.
public class AuthController : ControllerBase
{
private readonly IAuthenticationApiClient _authenticationApiClient ;
public AuthController ( IAuthenticationApiClient authenticationApiClient )
{
_authenticationApiClient = authenticationApiClient ;
}
AddAuth0AuthenticationClient
사용하여 AuthenticationApiClient
추가하고 관리 클라이언트, 토큰 캐시 및 IHttpClientBuilder 통합에서 사용할 M2M 애플리케이션 구성을 제공합니다. 이 라이브러리 내에서 다른 확장을 사용하기 전에 이 확장을 호출 해야 합니다 .
services . AddAuth0AuthenticationClient ( config =>
{
config . Domain = builder . Configuration [ "Auth0:Domain" ] ;
config . ClientId = builder . Configuration [ "Auth0:ClientId" ] ;
config . ClientSecret = builder . Configuration [ "Auth0:ClientSecret" ] ;
} ) ;
AddAuth0ManagementClient()
사용하여 ManagementApiClient
추가하고 액세스 토큰을 자동으로 연결하는 AddManagementAccessToken()
을 사용하여 DelegatingHandler
추가합니다.
services . AddAuth0ManagementClient ( ) . AddManagementAccessToken ( ) ;
Machine-to-Machine 애플리케이션이 관리 API에서 토큰을 요청할 수 있는 권한이 있는지, 사용하려는 기능에 대한 올바른 범위가 있는지 확인하세요.
그런 다음 서비스 내에서 IManagementApiClient
(또는 IAuthenticationApiClient
)를 요청할 수 있습니다.
public class MyAuth0Service : IAuth0Service
{
private readonly IManagementApiClient _managementApiClient ;
public MyAuth0Service ( IManagementApiClient managementApiClient )
{
_managementApiClient = managementApiClient ;
}
Auth0 테넌트와 함께 사용자 지정 도메인을 사용하는 경우 관리 API의 audience
이 잘못 설정되는 문제가 발생할 수 있습니다. Audience
속성을 통해 이를 재정의할 수 있습니다.
services . AddAuth0ManagementClient ( )
. AddManagementAccessToken ( c =>
{
c . Audience = "my-tenant.au.auth0.com" ;
} ) ;
참고: 이 기능은 이전 시나리오에 설명된 대로 호출 및 구성되는 services.AddAuth0AuthenticationClient(config => ...)
에 의존합니다.
이 라이브러리에는 모든 아웃바운드 요청에 액세스 토큰을 추가하는 위임 처리기(효과적으로 HttpClient를 위한 미들웨어)가 포함되어 있습니다. 이는 Auth0으로 보호되는 다른 서비스를 호출하는 데 유용합니다. 이 통합을 위해서는 서비스 구현이 등록의 일부로 IHttpClientFactory
사용해야 합니다. 여기에서 자세한 내용을 읽을 수 있습니다.
필요한 대상과 함께 AddAccessToken
사용하세요.
services . AddHttpClient < MyHttpService > ( x => x . BaseAddress = new Uri ( builder . Configuration [ "MyHttpService:Url" ] ) )
. AddAccessToken ( config => config . Audience = builder . Configuration [ "MyHttpService:Audience" ] ) ;
이 확장은 IHttpClientBuilder
를 반환하는 모든 등록과 호환되므로 Grpc의 클라이언트 팩터리와 함께 사용할 수 있습니다.
services . AddGrpcClient < UserService . UserServiceClient > ( x => x . Address = new Uri ( builder . Configuration [ "MyGrpcService:Url" ] ) )
. AddAccessToken ( config => config . Audience = builder . Configuration [ "MyGrpcService:Audience" ] ) ;
AddAccessToken
에는 런타임에 대상을 확인할 수 있는 기능을 전달하는 옵션도 있습니다. 이는 예상 대상이 항상 패턴을 따르거나 Steeltoe.NET과 같은 서비스 검색에 의존하는 경우 유용할 수 있습니다.
services . AddHttpClient < MyHttpService > ( x => x . BaseAddress = new Uri ( "https://MyServiceName/" ) )
. AddServiceDiscovery ( )
. AddAccessToken ( config => config . AudienceResolver = request => request . RequestUri . GetLeftPart ( UriPartial . Authority ) ) ;
인증 및 권한 부여 클라이언트는 모두 싱글톤으로 등록되며 다른 수명에 주입하는 데 적합합니다.
.NET 일반 호스트와 ASP.NET Core 예제는 모두 샘플 디렉터리에서 사용할 수 있습니다.
Auth0TokenCache
는 만료 시간의 95% 이상이 될 때까지 특정 대상에 대한 토큰을 캐시합니다. 캐시에 대한 요청이 만료의 95%에서 99% 사이에 이루어지면 만료에 도달하기 전에 토큰이 백그라운드에서 새로 고쳐집니다.
분산 시스템 간의 클럭 드리프트를 방지하기 위해 수명의 1%가 추가로 제거됩니다.
어떤 상황에서는 Auth0에서 수동으로 액세스 토큰을 요청해야 할 수도 있습니다. IAuth0TokenCache
클래스에 삽입하고 토큰을 요청하는 API 대상으로 GetTokenAsync
호출하면 이를 달성할 수 있습니다.
FusionCache의 메모리 내 전용 인스턴스가 캐싱 구현으로 사용됩니다. 이 인스턴스에는 이름이 지정 되며 FusionCache의 다른 사용에 영향을 주지 않습니다.
이 라이브러리는 구성에 있는 기본 Auth0 도메인을 적절한 URL로 형식화하는 데 사용할 수 있는 간단한 문자열 확장인 ToHttpsUrl()
노출합니다.
이는 일반적으로 Startup.cs
어딘가에 작성하게 되는 https://{Configuration["Auth0:Domain"]}/
과 동일합니다.
예를 들어 JWT 기관의 도메인 형식을 지정하면 다음과 같습니다.
. AddJwtBearer ( options =>
{
// "my-tenant.auth0.com" -> "https://my-tenant.auth0.com/"
options . Authority = builder . Configuration [ "Auth0:Domain" ] . ToHttpsUrl ( ) ;
//...
} ) ;
나는 Auth0과 제휴하지도 대표하지도 않습니다. 기본 ManagementApiClient
및 AuthenticationApiClient
와 관련된 모든 구현 문제는 공식 Auth0.NET 저장소로 이동해야 합니다.
Identicons 팩의 MIT 라이선스에 따라 사용되는 아이콘입니다.