
Mengintegrasikan Auth0.NET ke dalam proyek Anda sambil mengikuti konvensi .NET idiomatik dapat menjadi rumit dan melibatkan sejumlah besar boilerplate yang digunakan bersama antar proyek.
Perpustakaan ini berharap dapat memecahkan masalah tersebut, dengan menampilkan:
Ekstensi untuk Microsoft.Extensions.DependencyInjection .
Caching & pembaruan token akses otomatis untuk API Manajemen dan layanan REST & Grpc Anda sendiri
Integrasi HttpClientFactory untuk ekstensibilitas terpusat dan pengelolaan penangan HTTP internal.
Ekstensi IHttpClientBuilder , menyediakan penangan untuk secara otomatis menambahkan token akses ke permintaan keluar.
Pustaka ini kompatibel dengan semua runtime .NET Standard 2.0 (disarankan .NET 8+) dan cocok untuk digunakan dalam aplikasi ASP.NET Core dan .NET Generic Host yang berdiri sendiri.
Tambahkan Auth0Net.DependencyInjection ke proyek Anda:
Install-Package Auth0Net.DependencyInjection 
Jika Anda hanya menggunakan AuthenticationApiClient dan tidak menggunakan yang lain, Anda dapat memanggil AddAuth0AuthenticationClientCore dan meneruskan Domain Auth0 Anda. Integrasi ini ringan dan tidak mendukung fitur lain apa pun dari perpustakaan ini.
services . AddAuth0AuthenticationClientCore ( "your-auth0-domain.auth0.com" ) ; Anda kemudian dapat meminta IAuthenticationApiClient dalam kelas Anda:
public class AuthController : ControllerBase
{
private readonly IAuthenticationApiClient _authenticationApiClient ;
public AuthController ( IAuthenticationApiClient authenticationApiClient )
{
_authenticationApiClient = authenticationApiClient ;
}
Tambahkan AuthenticationApiClient dengan AddAuth0AuthenticationClient , dan sediakan konfigurasi aplikasi mesin-ke-mesin yang akan digunakan oleh integrasi Klien Manajemen, Token Cache, dan IHttpClientBuilder. Ekstensi ini harus dipanggil sebelum menggunakan ekstensi lain dalam perpustakaan ini:
services . AddAuth0AuthenticationClient ( config =>
{
config . Domain = builder . Configuration [ "Auth0:Domain" ] ;
config . ClientId = builder . Configuration [ "Auth0:ClientId" ] ;
config . ClientSecret = builder . Configuration [ "Auth0:ClientSecret" ] ;
} ) ; Tambahkan ManagementApiClient dengan AddAuth0ManagementClient() dan tambahkan DelegatingHandler dengan AddManagementAccessToken() yang akan melampirkan Access Token secara otomatis:
services . AddAuth0ManagementClient ( ) . AddManagementAccessToken ( ) ;Pastikan aplikasi Mesin-ke-Mesin Anda diberi wewenang untuk meminta token dari API Manajemen dan aplikasi tersebut memiliki cakupan yang benar untuk fitur yang ingin Anda gunakan.
Anda kemudian dapat meminta IManagementApiClient (atau IAuthenticationApiClient ) dalam layanan Anda:
public class MyAuth0Service : IAuth0Service
{
private readonly IManagementApiClient _managementApiClient ;
public MyAuth0Service ( IManagementApiClient managementApiClient )
{
_managementApiClient = managementApiClient ;
} Jika Anda menggunakan domain kustom dengan penyewa Auth0, Anda mungkin mengalami masalah saat audience API Manajemen salah disetel. Anda dapat menggantinya melalui properti Audience :
services . AddAuth0ManagementClient ( )
. AddManagementAccessToken ( c =>
{
c . Audience = "my-tenant.au.auth0.com" ;
} ) ;
Catatan: Fitur ini bergantung pada services.AddAuth0AuthenticationClient(config => ...) yang dipanggil dan dikonfigurasi seperti yang diuraikan dalam skenario sebelumnya.
Pustaka ini mencakup penangan pendelegasian - yang secara efektif merupakan middleware untuk HttpClient Anda - yang akan menambahkan token akses ke semua permintaan keluar. Ini berguna untuk memanggil layanan lain yang dilindungi oleh Auth0. Integrasi ini mengharuskan penerapan layanan Anda untuk menggunakan IHttpClientFactory sebagai bagian dari pendaftarannya. Anda dapat membaca lebih lanjut tentangnya di sini
Gunakan AddAccessToken bersama dengan audiens yang diperlukan:
services . AddHttpClient < MyHttpService > ( x => x . BaseAddress = new Uri ( builder . Configuration [ "MyHttpService:Url" ] ) )
. AddAccessToken ( config => config . Audience = builder . Configuration [ "MyHttpService:Audience" ] ) ; Ekstensi ini kompatibel dengan registrasi apa pun yang mengembalikan IHttpClientBuilder , sehingga dapat digunakan dengan pabrik klien Grpc:
services . AddGrpcClient < UserService . UserServiceClient > ( x => x . Address = new Uri ( builder . Configuration [ "MyGrpcService:Url" ] ) )
. AddAccessToken ( config => config . Audience = builder . Configuration [ "MyGrpcService:Audience" ] ) ; AddAccessToken juga memiliki opsi untuk meneruskan fungsi yang dapat menyelesaikan audiens saat runtime. Hal ini dapat berguna jika audiens yang Anda harapkan selalu mengikuti suatu pola, atau jika Anda mengandalkan penemuan layanan, seperti dari Steeltoe.NET:
services . AddHttpClient < MyHttpService > ( x => x . BaseAddress = new Uri ( "https://MyServiceName/" ) )
. AddServiceDiscovery ( )
. AddAccessToken ( config => config . AudienceResolver = request => request . RequestUri . GetLeftPart ( UriPartial . Authority ) ) ;Baik klien otentikasi dan otorisasi terdaftar sebagai lajang dan cocok untuk disuntikkan ke masa hidup lainnya.
Contoh .NET Generic Host dan ASP.NET Core tersedia di direktori sampel.
Auth0TokenCache akan menyimpan token untuk audiens tertentu hingga setidaknya 95% dari waktu kedaluwarsa. Jika permintaan ke cache dibuat antara 95% dan 99% masa berlakunya habis, token akan disegarkan di latar belakang sebelum masa berlakunya tercapai.
Tambahan 1% masa pakai dihapus untuk melindungi terhadap penyimpangan jam antar sistem terdistribusi.
Dalam beberapa situasi, Anda mungkin ingin meminta token akses dari Auth0 secara manual. Anda dapat mencapainya dengan memasukkan IAuth0TokenCache ke dalam kelas dan memanggil GetTokenAsync dengan audiens API yang Anda minta tokennya.
Instance FusionCache khusus dalam memori digunakan sebagai implementasi caching. Instans ini diberi nama dan tidak akan memengaruhi penggunaan FusionCache lainnya.
Pustaka ini memperlihatkan ekstensi string sederhana, ToHttpsUrl() , yang dapat digunakan untuk memformat domain Auth0 telanjang yang ada di konfigurasi Anda menjadi URL yang tepat.
Ini identik dengan https://{Configuration["Auth0:Domain"]}/ yang biasanya Anda tulis di suatu tempat di Startup.cs Anda.
Misalnya, memformat domain untuk Otoritas JWT:
. AddJwtBearer ( options =>
{
// "my-tenant.auth0.com" -> "https://my-tenant.auth0.com/"
options . Authority = builder . Configuration [ "Auth0:Domain" ] . ToHttpsUrl ( ) ;
//...
} ) ; Saya tidak berafiliasi atau mewakili Auth0. Semua masalah implementasi terkait ManagementApiClient dan AuthenticationApiClient yang mendasarinya harus masuk ke Repositori Auth0.NET resmi.
Ikon yang digunakan di bawah Lisensi MIT dari paket Identicons.