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.