Menerapkan otentikasi berbasis Microsoft Entra ID dalam aplikasi mainframe modern AWS Blu Age - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menerapkan otentikasi berbasis Microsoft Entra ID dalam aplikasi mainframe modern AWS Blu Age

Vishal Jaswani dan Rimpy Tewani, Amazon Web Services

Ringkasan

Aplikasi mainframe yang dimodernisasi dengan menggunakan pola refactoring, seperti yang oleh AWS Mainframe Modernization Refactor with AWS Blu Age, memerlukan integrasi mekanisme otentikasi yang cermat ke dalam arsitektur aplikasi baru. Integrasi ini biasanya ditujukan sebagai kegiatan pasca-modernisasi. Tugas dapat menjadi kompleks dan sering melibatkan migrasi atau eksternalisasi sistem otentikasi yang ada untuk menyelaraskan dengan standar keamanan modern dan praktik cloud-native. Pengembang perlu mempertimbangkan cara menerapkan otentikasi secara efektif saat mereka bekerja dalam batasan lingkungan runtime dan pustaka aplikasi yang dimodernisasi. Setelah modernisasi, AWS menyediakan cara untuk memudahkan Anda mengintegrasikan kode modern AWS Blu Age Anda dengan identitas dan sistem manajemen akses seperti Amazon Cognito dan Microsoft Entra ID (sebelumnya dikenal sebagai Azure AD).

Pola ini menjelaskan cara menerapkan mekanisme otentikasi dalam aplikasi modern Anda ketika penyedia otentikasi adalah Microsoft Entra ID, tanpa menghabiskan waktu untuk penelitian dan uji coba. Pola ini menyediakan:

  • Pustaka Angular yang teruji lapangan dan relevan dari Microsoft Authentication Library (MSAL) dan dokumentasi Microsoft Entra ID lainnya yang penting untuk implementasi otentikasi. 

  • Konfigurasi yang diperlukan pada AWS Blu Age Runtime untuk mengaktifkan Spring Security dengan menggunakan 2.0. OAuth

  • Pustaka yang menangkap identitas pengguna yang diautentikasi dan meneruskannya ke Blu Age AWS Runtime.

  • Langkah-langkah keamanan yang kami rekomendasikan untuk diterapkan.

  • Kiat pemecahan masalah untuk masalah yang umum ditemui dengan pengaturan Microsoft Entra ID.

catatan

Pola ini menggunakan pustaka OAuth ekstensi AWS Blu Age, yang disediakan untuk pelanggan sebagai bagian dari keterlibatan Layanan AWS Profesional mereka. Perpustakaan ini bukan bagian dari AWS Blu Age Runtime.

Prasyarat dan batasan

Prasyarat

  • Aplikasi modern yang diproduksi oleh alat refactoring modernisasi mainframe AWS Blu Age. Pola ini digunakan CardDemosebagai contoh aplikasi mainframe open source.

  • Perpustakaan OAuth ekstensi AWS Blu Age, yang disediakan oleh tim AWS Blu Age selama keterlibatan Anda dengan Layanan AWS Profesional.

  • Aktif Akun AWS untuk menyebarkan dan menguji aplikasi modern.

  • Keakraban dengan file konfigurasi AWS Blu Age dan dasar-dasar Microsoft Entra ID.

Batasan

  • Pola ini mencakup otentikasi OAuth 2.0 dan alur otorisasi berbasis token dasar. Skenario otorisasi lanjutan dan mekanisme kontrol akses berbutir halus tidak dalam cakupan.

  • Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat Layanan AWS berdasarkan Wilayah. Untuk titik akhir tertentu, lihat Titik akhir dan kuota layanan, dan pilih tautan untuk layanan.

Versi produk

Pola ini dikembangkan dengan menggunakan:

  • AWS Blu Age Runtime versi 4.1.0 (polanya juga berfungsi dengan versi yang lebih baru yang kompatibel ke belakang)

  • Pustaka MSAL versi 3.0.23

  • Kit Pengembangan Java (JDK) versi 17

  • Versi sudut 16.1

Arsitektur

Tumpukan teknologi sumber

Dalam lingkungan mainframe yang khas, otentikasi diimplementasikan melalui profil pengguna. Profil ini mengidentifikasi pengguna ke sistem, menentukan siapa yang dapat masuk, dan menentukan fungsi mana yang dapat dilakukan pengguna pada sumber daya sistem. Profil pengguna dikelola oleh petugas keamanan atau administrator keamanan.

Tumpukan teknologi target

  • ID Microsoft Entra

  • Backend berbasis Java Spring Boot yang dimodernisasi

  • AWS Blu Age Runtime

  • Keamanan Musim Semi dengan OAuth 2.0

  • Aplikasi satu halaman sudut (SPA)

Arsitektur target

AWS Blu Age runtime mendukung otentikasi OAuth berbasis 2.0 secara default, sehingga pola menggunakan standar itu untuk melindungi backend. APIs

Diagram berikut menggambarkan aliran proses.

catatan

Diagram mencakup Amazon Aurora sebagai contoh modernisasi basis data meskipun Aurora tidak termasuk dalam langkah-langkah untuk pola ini.

Alur proses untuk otentikasi berbasis Entra ID untuk aplikasi AWS Blu Age.

di mana:

  1. Pengguna mencoba mengautentikasi dengan Microsoft Entra ID.

  2. Microsoft Entra ID mengembalikan token refresh, akses, dan ID yang digunakan aplikasi dalam panggilan berikutnya.

  3. Pencegat MSAL menyertakan token akses di Authorization header permintaan HTTPS untuk memanggil AWS Blu Age Runtime.

  4. extension-oauthPustaka AWS Blu Age mengekstrak informasi pengguna dari header dengan menggunakan file konfigurasi AWS Blu Age Runtime (application-main.yml) dan menempatkan informasi ini dalam SharedContext objek sehingga logika bisnis dapat menggunakannya.

    catatan

    SharedContextadalah komponen runtime yang disediakan oleh AWS Blu Age yang mengelola konteks aplikasi dan informasi status di seluruh aplikasi modern. Untuk informasi selengkapnya tentang komponen dan pembaruan AWS Blu Age Runtime, lihat catatan rilis AWS Blu Age di dokumentasi. AWS Mainframe Modernization Untuk informasi selengkapnya tentang application-main.yml file, lihat Mengatur konfigurasi untuk AWS Blu Age Runtime dalam dokumentasi. AWS Mainframe Modernization

  5. AWS Blu Age Runtime memeriksa apakah token ada. 

    1. Jika token ada, ia memeriksa validitas token dengan berkomunikasi dengan Microsoft Entra ID. 

    2. Jika token tidak ada, AWS Blu Age Runtime mengembalikan kesalahan dengan kode status HTTP 403.

  6. Jika token valid, AWS Blue Age Runtime memungkinkan logika bisnis untuk melanjutkan. Jika token tidak valid, AWS Blu Age Runtime mengembalikan kesalahan dengan kode status HTTP 403.

OAuth Alur kerja 2.0

Untuk diagram tingkat tinggi alur kerja OAuth 2.0, lihat dokumentasi Microsoft Entra.

Alat

Layanan AWS

  • AWS Mainframe Modernizationmenyediakan alat dan sumber daya untuk membantu Anda merencanakan dan mengimplementasikan migrasi dan modernisasi dari mainframe ke lingkungan runtime AWS terkelola. Anda dapat menggunakan fitur refactoring layanan ini, yang disediakan oleh AWS Blu Age, untuk mengonversi dan memodernisasi aplikasi mainframe lama Anda.

Repositori kode

CardDemo Aplikasi telah diperbarui untuk menunjukkan integrasi dengan Microsoft Entra ID. Anda dapat mengakses kode dari GitHub repositori untuk pola ini.

Konfigurasi backend

Pola ini memerlukan perubahan pada file application-main.yml konfigurasi untuk mengaktifkan Spring Security dengan menggunakan OAuth 2.0 pada aplikasi backend.  .ymlFile terlihat seperti ini:

gapwalk-application.security: enabled gapwalk-application: security: identity: oauth issuerUri: ${issuerUrl} claim: claims: - claimName: upn claimMapValue: username spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration - org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret} provider: azure authorization-grant-type: authorization_code redirect-uri: ${redirectUri} scope: openid provider: azure: authorization-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/authorize token-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/token jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys resourceserver: jwt: jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys

AWS Pustaka filter OAuth ekstensi Blu Age

Perpustakaan OAuth ekstensi AWS Blu Age disediakan oleh tim AWS Blu Age selama keterlibatan Anda dengan Layanan AWS Profesional.

Pustaka ini membaca claim.claims konfigurasi dalam application-main.yml fie yang ditampilkan di blok kode sebelumnya. Konfigurasi ini adalah daftar. Setiap item dalam daftar memberikan dua nilai: claimName danclaimMapValue. claimNamemerupakan nama kunci dalam JSON Web Token (JWT) yang dikirim oleh frontend, dan claimMapValue merupakan nama kunci dalam. SharedContext Misalnya, jika Anda ingin menangkap ID pengguna di backend, atur claimName ke nama kunci di JWT yang menyimpan userId yang disediakan oleh Microsoft Entra ID, dan atur claimMapValue ke nama kunci untuk mengambil ID pengguna dalam kode backend.

Misalnya, jika Anda mengatur UserIdclaimMapValue, Anda dapat menggunakan kode berikut untuk mengekstrak ID pengguna:

SharedContext.get().getValue("userId", [UserId]);

Praktik terbaik

Dalam penerapan pola ini, pertimbangkan pertimbangan keamanan penting berikut.

penting

Pola ini memberikan dasar untuk integrasi otentikasi. Kami menyarankan Anda menerapkan langkah-langkah keamanan selain yang dibahas di bagian ini berdasarkan persyaratan bisnis Anda sebelum Anda menyebarkannya ke produksi.

  • AWS keamanan konfigurasi.Pindahkan nilai konfigurasi sensitif dari application-main.yml ke AWS Secrets Manager. Misalnya, konfigurasikan properti berikut dengan menggunakan Secrets Manager:

    security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret}

    Untuk informasi selengkapnya tentang cara menggunakan Secrets Manager untuk mengonfigurasi parameter AWS Blu Age, lihat Rahasia AWS Blu Age Runtime di dokumentasi. AWS Mainframe Modernization

  • Perlindungan lingkungan runtime. Konfigurasikan lingkungan aplikasi modern dengan kontrol AWS keamanan yang tepat:

    server: tomcat: remoteip: protocol-header: X-Forwarded-Proto remote-ip-header: X-Forwarded-For forward-headers-strategy: NATIVE
  • CloudWatch Pencatatan Amazon. Pertimbangkan untuk menambahkan filelogback-spring.xml to src/main/resources:

    <configuration> <appender name="CLOUDWATCH" class="com.amazonaws.services.logs.logback.CloudWatchAppender"> <logGroup>/aws/bluage/application</logGroup> <logStream>${AWS_REGION}-${ENVIRONMENT}</logStream> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> <root level="INFO"> <appender-ref ref="CLOUDWATCH"/> </root> </configuration>

    Untuk informasi tentang mengaktifkan penelusuran dengan CloudWatch, lihat Mengaktifkan jejak untuk mencatat korelasi dalam dokumentasi. CloudWatch

  • Konfigurasi dan penanganan token. Konfigurasikan masa pakai token di Microsoft Entra ID agar selaras dengan persyaratan keamanan Anda. Tetapkan token akses untuk kedaluwarsa dalam 1 jam dan refresh token untuk kedaluwarsa dalam 24 jam. Dalam konfigurasi AWS Blu Age Runtime (application-main.yml), pastikan validasi JWT dikonfigurasi dengan benar dengan URI penerbit dan nilai audiens yang tepat dari pendaftaran aplikasi Entra ID Anda.

    Saat token kedaluwarsa dan di-refresh:

    1. Pencegat kesalahan aplikasi Angular menangani respons 401 dengan mendapatkan token baru melalui MSAL.

    2. Token baru dikirim dengan permintaan berikutnya.

    3. OAuth Filter AWS Blu Age Runtime memvalidasi token baru dan secara otomatis memperbarui SharedContext dengan informasi pengguna saat ini. Ini memastikan bahwa logika bisnis terus memiliki akses ke konteks pengguna yang valid melalui SharedContext.get().getValue() panggilan.

    Untuk informasi selengkapnya tentang komponen AWS Blu Age Runtime dan pembaruannya, lihat catatan rilis AWS Blu Age.

  • Keamanan Runtime AWS Blu Age. oauth2-extPustaka yang disediakan oleh AWS Blu Age harus ditempatkan di lokasi direktori bersama yang benar ({app-server-home}/shared/) dengan izin file yang tepat. Verifikasi bahwa pustaka berhasil mengekstrak informasi pengguna JWTs dengan memeriksa populasi SharedContext objek di log Anda.

  • Konfigurasi klaim khusus. Dalamapplication-main.yml, tentukan klaim yang Anda butuhkan dari Microsoft Entra ID secara eksplisit. Misalnya, untuk menangkap email dan peran pengguna, tentukan:

    gapwalk-application: security: claim: claims: - claimName: upn claimMapValue: username - claimName: roles claimMapValue: userRoles - claimName: email claimMapValue: userEmail
  • Penanganan kesalahan. Tambahkan penanganan kesalahan untuk mengatasi kegagalan otentikasi di aplikasi Angular Anda; misalnya:

    @Injectable() export class AuthErrorInterceptor implements HttpInterceptor { intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { return next.handle(request).pipe( catchError((error: HttpErrorResponse) => { if (error.status === 401) { // Handle token expiration this.authService.login(); } if (error.status === 403) { // Handle unauthorized access this.router.navigate(['/unauthorized']); } return throwError(() => error); }) ); } }
  • Konfigurasi batas waktu sesi. Konfigurasikan pengaturan batas waktu sesi di AWS Blu Age Runtime dan Microsoft Entra ID. Misalnya, tambahkan kode berikut ke application-main.yml file Anda:

    server: servlet: session: timeout: 3600 # 1 hour in seconds
  • MsalGuard. Anda harus menerapkan MsalGuard fitur untuk semua rute yang dilindungi untuk mencegah akses yang tidak sah. Misalnya:

    const routes: Routes = [ { path: '', redirectTo: '/transaction-runner', pathMatch: 'full' }, { path: 'transaction-runner', component: TransactionRunnerComponent, canActivate:guards }, { path: 'user-info', component: UserInfoComponent, canActivate:guards }, { path: 'term/:transid/:commarea', component: TermComponent, canActivate:guards }, { path: 'code', component: TransactionRunnerComponent } ];

    Rute yang tidak memiliki MsalGuard perlindungan akan dapat diakses tanpa otentikasi, berpotensi mengekspos fungsionalitas sensitif. Pastikan bahwa semua rute yang memerlukan otentikasi menyertakan penjaga dalam konfigurasi mereka.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan akun Microsoft Azure untuk membuat ID Entra.

Untuk opsi dan instruksi, lihat situs web Microsoft Azure.

Pengembang aplikasi

Siapkan ID Microsoft Entra di aplikasi Anda.

Untuk mempelajari cara menambahkan otentikasi Microsoft Entra ID B2C (Azure AD B2C) ke Angular SPA Anda, lihat dokumentasi Microsoft. Secara khusus:

  1. Daftarkan aplikasi Anda dan catat pengidentifikasi.

  2. Paparkan titik akhir transaksi AWS Blu Age dengan menambahkan dan mengekspos cakupan khusus.  

  3. Setelah Anda menentukan cakupan dan URL API, konfigurasikan nilai-nilai ini di apiUri dan apiScope properti environment.ts file dalam repositori kode.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Kloning GitHub repositori untuk mendapatkan kode Angular yang diperlukan untuk otentikasi.

Jalankan perintah berikut untuk mengkloning GitHub repositori yang disediakan dengan pola ini ke direktori kerja lokal Anda saat ini:

git clone https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app.git
Pengembang aplikasi

Terapkan kode modern AWS Blu Age di server Tomcat untuk mengimplementasikan otentikasi.

Untuk mengatur lingkungan lokal yang mencakup Tomcat dan server pengembangan Angular, ikuti langkah-langkah instalasi yang disediakan oleh tim AWS Blu Age sebagai bagian dari keterlibatan pelanggan Anda dengan Layanan AWS Profesional.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Aktifkan keamanan AWS Blu Age Runtime untuk melindungi titik akhir AWS Blu Age REST API.

Konfigurasikan application-main.yml file yang digunakan AWS Blu Age Runtime sebagai berikut. Untuk contoh file ini, lihat bagian Repositori kode sebelumnya dalam pola ini.

  • spring:security:oauth2:client:*mengaktifkan dukungan klien Spring Security OAuth 2.0. Ganti pengaturan dengan nilai yang khusus untuk pengaturan Microsoft Entra ID Anda.

  • spring:security:oauth2:resourceservermemungkinkan dukungan server sumber daya Spring Security OAuth 2.0.

  • gapwalk-application.security.issuerUrimenentukan URL penyedia identitas untuk mengambil informasi konfigurasi seperti titik akhir otorisasi, titik akhir token, dan sebagainya.

  • gapwalk-application.security.identityharus diatur keoauth.

  • gapwalk-application.security.claim.claimsmenentukan daftar klaim yang diperlukan untuk menangkap nama pengguna IDs dan pengguna.  Sebagai contoh, lihat bagian Repositori kode sebelumnya dalam pola ini.

  • gapwalk-application.securityharus diatur keenabled.

  • spring.autoconfigure.excludeharus dihapus untuk mengaktifkan otentikasi.

Pengembang aplikasi

Masukkan kode contoh dari lingkungan lokal Anda ke dalam basis kode Angular modern Blu Age Anda.

Untuk informasi tentang cara memasukkan contoh ke dalam basis kode Angular modern AWS Blu Age Anda, lihat bagian repositori Kode sebelumnya dalam pola ini.

Pengembang aplikasi

Tempatkan oauth2-ext perpustakaan di direktori bersama.

Tempatkan oauth2-ext perpustakaan di direktori bersama server aplikasi sehingga aplikasi modern AWS Blu Age Anda dapat menggunakannya.Jalankan perintah berikut:

cd oauth2-ext/target cp extension-oauth-filter-<version>.jar /{app-server-home}/shared/
Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan aplikasi frontend.

Jalankan perintah berikut untuk memulai aplikasi frontend secara lokal:

npm install ng serve --ssl npm start
catatan

Menambahkan --ssl flag ke ng serve perintah memastikan bahwa server pengembangan menggunakan HTTPS, yang lebih aman daripada protokol lain dan memberikan simulasi lingkungan produksi yang lebih baik.

Pengembang aplikasi

Mulai aplikasi backend.

Mulai server Tomcat di Eclipse.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Uji fungsionalitas login.

Akses aplikasi yang digunakan secara lokal di http://localhost:4200 untuk memverifikasi bahwa pengguna diminta untuk mengonfirmasi identitas mereka.

catatan

HTTP digunakan di sini untuk tujuan demonstrasi. Dalam produksi atau lingkungan lain yang dapat diakses publik, Anda harus menggunakan HTTPS untuk keamanan. Bahkan untuk pengembangan lokal, kami menyarankan Anda mengatur HTTPS jika memungkinkan.

Prompt login Microsoft akan muncul, dan pengguna yang dikonfigurasi di Microsoft Entra ID harus diizinkan untuk mengakses aplikasi.

Pengembang aplikasi

Uji header otorisasi dalam permintaan.

catatan

Langkah-langkah berikut menggunakan CardDemoaplikasi sebagai contoh. Langkah-langkah pengujian untuk aplikasi modern lainnya akan bervariasi.

  1. Luncurkan transaksi CC00 di CardDemo aplikasi.

  2. Masuk dengan kredensi pengguna. Misalnya, jika Anda menggunakan lokakarya mandiri AWS Blu Age level 3, Anda dapat menggunakan nama USER0001 dan kata sandi PASSWORD untuk kredensialnya.

  3. Buka jendela Alat Pengembang di tab yang sama di browser Anda.

  4. Buka tab Jaringan dan periksa permintaan yang dikirim ke backendhttp://localhost:8080/gapwalk-application/transaction.

  5. Periksa header permintaan dan verifikasi bahwa Anda melihat header otorisasi dengan nilai di Bearer <token> mana nilai yang <token> dihasilkan oleh Microsoft Entra ID.

Pengembang aplikasi

Uji fungsionalitas logout.

Pilih Keluar untuk keluar, dan coba akses aplikasi lagi. Ini harus menyajikan prompt login baru.

Pengembang aplikasi

Pemecahan Masalah

IsuSolusi

Token yang dikeluarkan oleh Microsoft Entra ID tidak kompatibel dengan keamanan Spring Boot OAuth 2.0.

Untuk penyelesaian masalah ini, lihat Microsoft Entra ID OAuth Flow di OAuth blog.

Pertanyaan umum terkait token.

Untuk memecahkan kode dan melihat konten token JWT, gunakan situs web https://jwt.io/.

Sumber daya terkait