.NET の慣用的な規約に従いながら Auth0.NET をプロジェクトに統合するのは面倒な場合があり、プロジェクト間で共有される大量の定型文が必要になります。
このライブラリはその問題を解決することを目的としており、以下の機能を備えています。
Microsoft.Extensions.DependencyInjection
の拡張機能。
Management API および独自の REST および Grpc サービスのアクセス トークンの自動キャッシュと更新
HttpClientFactory の統合により、内部 HTTP ハンドラーの一元的な拡張性と管理が可能になります。
IHttpClientBuilder
拡張機能。送信リクエストにアクセス トークンを自動的に追加するハンドラーを提供します。
このライブラリは、すべての .NET Standard 2.0 ランタイム (.NET 8 以降を推奨) と互換性があり、ASP.NET Core およびスタンドアロン .NET Generic Host アプリケーションでの使用に適しています。
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
を追加し、Management Client、Token Cache、および IHttpClientBuilder 統合によって使用されるマシン間アプリケーション構成を提供します。この拡張機能は、このライブラリ内の他の拡張機能を使用する前に呼び出す必要があります。
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 テナントでカスタム ドメインを使用している場合、Management 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 Generic Host と 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 と提携していませんし、Auth0 を代表していません。基盤となるManagementApiClient
およびAuthenticationApiClient
に関するすべての実装の問題は、公式 Auth0.NET リポジトリに送信する必要があります。
Identicons パックの MIT ライセンスに基づいて使用されるアイコン。