際際滷

際際滷Share a Scribd company logo
Mengamankan Aplikasi  Java EE 6 Bowo Prasetyo Mengamankan Komponen Web  dengan  Otentikasi Berbasis Form 7 Nopember 2011 http://www.scribd.com/prazjp http://www.slideshare.net/bowoprasetyo
Prasyarat Tutorial ini menggunakan software berikut: Java EE 6 SDK  ( http://java.sun.com/javaee/sdk/ )
Netbeans IDE v 7.0.1  ( http://netbeans.org/ )
GlassFish Application Server v 3.1.1 ( http://glassfish.java.net/ )
Mekanisme Otentikasi Otentikasi dasar HTTP Username  dan  password  di form default Otentikasi berbasis form Form  data otentikasi  dapat dikustomisasi Otentikasi  digest Otentikasi dasar dengan password terenkripsi Otentikasi klien Server mengotentikasi klien dengan  public key Otentikasi mutualisme Server dan klien saling mengotentikasi
Aplikasi Java EE Mengamankan Komponen Web  dengan  Otentikasi Berbasis Form
Otentikasi Berbasis Form Pada otentikasi berbasis form proses login sebagian ditangani oleh aplikasi.
Dilakukan dengan konfigurasi  deployment descriptor .
Dan diperlukan tiga page baru:  login.jsp : menampilkan form login.
logout.jsp : untuk logout dari sistem.
error.jsp : menampilkan pesan kesalahan login.
Otentikasi  Berbasis Form
Class Diagram Aplikasi terdiri atas 4 halaman JSP ( index.jsp ,  login.jsp ,  logout.jsp ,  error.jsp ) +  security context  dari  web container .
index.jsp  yang menampilkan Hello World! mempunyai 1 link ke  logout.jsp  dan mengakses  security context .
Security context  me- redirect  ke  login.jsp  yang berisi form login kalau pengguna belum login, atau ke  error.jsp  kalau pengguna gagal login.
Sequence Diagram requestAccess : pengguna mengakses  index.jsp .
checkAuthentication :  security context  mengecek pengguna sudah login atau belum.
4.requestAuthenticationData : kalau belum login,  security context  me- redirect  ke  login.jsp  untuk menampilkan form login. supplyAuthenticationData : pengguna men- submit  data login ke  security context .
setCredential : kalau data otentikasi valid,   security context  mengeset data  credential  pengguna di session, atau
showError : kalau tidak valid,  me-redirect ke  error.jsp . Kembali ke no  3  selama data otentikasi belum valid.
Sequence Diagram setCredential : kalau sudah login,   security context  mengeset data  credential  ke  index.jsp .
checkAuthorization :  security context  mengecek pengguna punya otorisasi mengakses url atau tidak.
buildHtml : kalau pengguna punya otorisasi,  security context  me- redirect  ke  index.jsp  untuk menampilkan HTML, atau
showError : kalau tidak punya otorisasi,  menampilkan pesan kesalahan.
Mengamankan HelloEnterprise Membuat direktori target ( form ),  form/index.jsp ,  login.jsp ,  logout.jsp  dan  error.jsp .
Menambah  users  ke server GlassFish:  praz.form .
Menentukan mekanisme otentikasi:  form-based .
Menambah  security   roles: FormRole.
Menambah  security constraints: FormConstraint.
Memetakan  Role  ->  Users / Groups: FormRole -> praz.form.
Membuat Direktori Target Jalankan Netbeans, buka modul web HelloEnterprise-war
Klik kanan  Web Pages  ->  New  ->  Folder ...
Beri nama  form   direktori yang akan diamankan.
Copy file  index.jsp  ke dalam direktori  form .
Modifikasi isinya untuk menampilkan  username  yang sedang login.
Komponen Teramankan  index.jsp  Komponen web teramankan  index.jsp  di direktori  form  <%@page contentType=&quot;text/html&quot; pageEncoding=&quot;UTF-8&quot;%> <% String username = ((HttpServletRequest)pageContext.getRequest()).getUserPrincipal().getName(); %> <!DOCTYPE html>
Komponen Teramankan  index.jsp  <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;> <title>Otentikasi Berbasis Form untuk JSP</title> </head> <body> <h1>Hello <%= username %>!</h1> <a href=&quot;../logout.jsp&quot;>Logout</a> </body> </html>
Membuat  login.jsp , logout.jsp  dan  error.jsp Jalankan Netbeans, buka modul web HelloEnterprise-war
Buat  login.jsp ,  logout.jsp  dan  error.jsp  di luar direktori  form .
Klik kanan  Web Pages  ->  New  ->  JSP ...
Isi file name:  login.jsp , klik  Finish .

More Related Content

Mengamankan Aplikasi Java EE 6

  • 1. Mengamankan Aplikasi Java EE 6 Bowo Prasetyo Mengamankan Komponen Web dengan Otentikasi Berbasis Form 7 Nopember 2011 http://www.scribd.com/prazjp http://www.slideshare.net/bowoprasetyo
  • 2. Prasyarat Tutorial ini menggunakan software berikut: Java EE 6 SDK ( http://java.sun.com/javaee/sdk/ )
  • 3. Netbeans IDE v 7.0.1 ( http://netbeans.org/ )
  • 4. GlassFish Application Server v 3.1.1 ( http://glassfish.java.net/ )
  • 5. Mekanisme Otentikasi Otentikasi dasar HTTP Username dan password di form default Otentikasi berbasis form Form data otentikasi dapat dikustomisasi Otentikasi digest Otentikasi dasar dengan password terenkripsi Otentikasi klien Server mengotentikasi klien dengan public key Otentikasi mutualisme Server dan klien saling mengotentikasi
  • 6. Aplikasi Java EE Mengamankan Komponen Web dengan Otentikasi Berbasis Form
  • 7. Otentikasi Berbasis Form Pada otentikasi berbasis form proses login sebagian ditangani oleh aplikasi.
  • 8. Dilakukan dengan konfigurasi deployment descriptor .
  • 9. Dan diperlukan tiga page baru: login.jsp : menampilkan form login.
  • 10. logout.jsp : untuk logout dari sistem.
  • 11. error.jsp : menampilkan pesan kesalahan login.
  • 13. Class Diagram Aplikasi terdiri atas 4 halaman JSP ( index.jsp , login.jsp , logout.jsp , error.jsp ) + security context dari web container .
  • 14. index.jsp yang menampilkan Hello World! mempunyai 1 link ke logout.jsp dan mengakses security context .
  • 15. Security context me- redirect ke login.jsp yang berisi form login kalau pengguna belum login, atau ke error.jsp kalau pengguna gagal login.
  • 16. Sequence Diagram requestAccess : pengguna mengakses index.jsp .
  • 17. checkAuthentication : security context mengecek pengguna sudah login atau belum.
  • 18. 4.requestAuthenticationData : kalau belum login, security context me- redirect ke login.jsp untuk menampilkan form login. supplyAuthenticationData : pengguna men- submit data login ke security context .
  • 19. setCredential : kalau data otentikasi valid, security context mengeset data credential pengguna di session, atau
  • 20. showError : kalau tidak valid, me-redirect ke error.jsp . Kembali ke no 3 selama data otentikasi belum valid.
  • 21. Sequence Diagram setCredential : kalau sudah login, security context mengeset data credential ke index.jsp .
  • 22. checkAuthorization : security context mengecek pengguna punya otorisasi mengakses url atau tidak.
  • 23. buildHtml : kalau pengguna punya otorisasi, security context me- redirect ke index.jsp untuk menampilkan HTML, atau
  • 24. showError : kalau tidak punya otorisasi, menampilkan pesan kesalahan.
  • 25. Mengamankan HelloEnterprise Membuat direktori target ( form ), form/index.jsp , login.jsp , logout.jsp dan error.jsp .
  • 26. Menambah users ke server GlassFish: praz.form .
  • 28. Menambah security roles: FormRole.
  • 29. Menambah security constraints: FormConstraint.
  • 30. Memetakan Role -> Users / Groups: FormRole -> praz.form.
  • 31. Membuat Direktori Target Jalankan Netbeans, buka modul web HelloEnterprise-war
  • 32. Klik kanan Web Pages -> New -> Folder ...
  • 33. Beri nama form direktori yang akan diamankan.
  • 34. Copy file index.jsp ke dalam direktori form .
  • 35. Modifikasi isinya untuk menampilkan username yang sedang login.
  • 36. Komponen Teramankan index.jsp Komponen web teramankan index.jsp di direktori form <%@page contentType=&quot;text/html&quot; pageEncoding=&quot;UTF-8&quot;%> <% String username = ((HttpServletRequest)pageContext.getRequest()).getUserPrincipal().getName(); %> <!DOCTYPE html>
  • 37. Komponen Teramankan index.jsp <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;> <title>Otentikasi Berbasis Form untuk JSP</title> </head> <body> <h1>Hello <%= username %>!</h1> <a href=&quot;../logout.jsp&quot;>Logout</a> </body> </html>
  • 38. Membuat login.jsp , logout.jsp dan error.jsp Jalankan Netbeans, buka modul web HelloEnterprise-war
  • 39. Buat login.jsp , logout.jsp dan error.jsp di luar direktori form .
  • 40. Klik kanan Web Pages -> New -> JSP ...
  • 41. Isi file name: login.jsp , klik Finish .
  • 42. Begitu juga untuk membuat logout.jsp dan error.jsp .
  • 43. Form Login Dengan login.jsp Sesuai spesifikasi servlet, form login harus dibuat dengan: Method: POST
  • 45. 2 paramater: j_username dan j_password Web container akan menggunakan info ini untuk melakukan otentikasi.
  • 46. Form Login Dengan login.jsp <%@page contentType=&quot;text/html&quot; pageEncoding=&quot;UTF-8&quot;%> <!DOCTYPE html> <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;> <title>Halaman Login</title> </head> <body> <h1>Halaman Login</h1>
  • 47. Form Login Dengan login.jsp <form method=&quot;POST&quot; action=&quot;j_security_check&quot;> <ul> <li>Username: <input type=&quot;text&quot; name=&quot;j_username&quot; /></li> <li>Password: <input type=&quot;password&quot; name=&quot;j_password&quot; /></li> </ul> <input type=&quot;submit&quot; value=&quot;Login&quot; /> </form> </body> </html>
  • 48. Halaman Logout logout.jsp Karena informasi login tersimpan di session, proses logout dapat dilakukan dengan cara mengakhiri session.
  • 49. Di JSP terdapat variabel session yang menyimpan obyek session.
  • 50. Untuk mengakhirinya digunakan metoda invalidate .
  • 51. Halaman Logout logout.jsp <%@page contentType=&quot;text/html&quot; pageEncoding=&quot;UTF-8&quot;%> <% session.invalidate(); %> <!DOCTYPE html> <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;> <title>Halaman Logout</title> </head> <body> <h1>Anda telah logout!</h1> <a href=&quot;index.jsp&quot;>Kembali ke halaman depan</a> </body> </html>
  • 52. Halaman Error error.jsp <%@page contentType=&quot;text/html&quot; pageEncoding=&quot;UTF-8&quot;%> <!DOCTYPE html> <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;> <title>Halaman Kesalahan Login</title> </head> <body> <h1>Ada kesalahan login!</h1> <a href=&quot;index.jsp&quot;>Kembali ke halaman depan</a> </body> </html>
  • 53. Menentukan Mekanisme Otentikasi Jalankan Netbeans, buka modul web HelloEnterprise-war
  • 54. Di Projects Explorer , buka node Web Pages -> WEB-INF
  • 55. Buka file web.xml , klik tab Security
  • 56. Buka node Login Configuration , pilih Form
  • 57. Isi login page: /login.jsp , error page: /error.jsp , realm name: file
  • 58. Menentukan Mekanisme Otentikasi Deployment descriptor standar komponen web: <project-dir>/web/WEB-INF/web.xml <web-app> ... <login-config> <auth-method>FORM</auth-method> <realm-name>file</realm-name> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> ... </web-app>
  • 59. Menambah Security Roles Jalankan Netbeans, buka modul web HelloEnterprise-war
  • 60. Di Projects Explorer , buka node Web Pages -> WEB-INF
  • 61. Buka file web.xml
  • 62. Klik tab Security
  • 63. Buka node Security Roles , klik Add..
  • 64. Isi Role Name dan Description Role name tanpa spasi, mis. FormRole Klik OK
  • 65. Menambah security roles Deployment descriptor standar komponen web: <project-dir>/web/WEB-INF/web.xml <web-app> ... <security-role> <description>Has access for form-based authentication.</description> <role-name>FormRole</role-name> </security-role> ... </web-app>
  • 66. Menambah Security Constraints Jalankan Netbeans, buka modul web HelloEnterprise-war
  • 67. Di Projects Explorer , buka node Web Pages -> WEB-INF
  • 68. Buka file web.xml
  • 69. Klik tab Security
  • 70. Di folder Security Constraints klik Add Security Constraints
  • 71. Isi Display Name
  • 72. Menambah Security Constraints Di kolom Web Resource Collection klik Add..
  • 73. Isi Resource Name , Description , dan URL Pattern(s) URL pattern: bagian berwarna biru htpp://hostname:port/root /form/* Pilih HTTP Method(s)
  • 75. Cek Enable Authentication Constraint
  • 76. Isi Description dan Role Name(s): FormRole
  • 77. Menambah security constraints Deployment descriptor standar komponen web: <project-dir>/web/WEB-INF/web.xml <web-app> ... <security-constraint> <display-name>FormConstraint</display-name> <web-resource-collection> <web-resource-name>FormDirectory</web-resource-name> <description>Form directory</description> <url-pattern>/form/*</url-pattern> </web-resource-collection>
  • 78. Menambah security constraints Deployment descriptor standar komponen web: <project-dir>/web/WEB-INF/web.xml <auth-constraint> <description>Only FormRole is allowed to access.</description> <role-name>FormRole</role-name> </auth-constraint> </security-constraint> ... </web-app>
  • 79. Memetakan Role -> Users/Groups Jalankan Netbeans, buka modul web HelloEnterprise-war
  • 80. Di Projects Explorer , buka node Web Pages -> WEB-INF
  • 81. Buka file glassfish-web.xml , klik tab Security
  • 82. Buka node FormRole , klik Add Principal...
  • 83. Isi Principal Name : username pengguna GlassFish (mis. praz.form )
  • 85. Memetakan Role -> Users/Groups Deployment descriptor glassfish komponen web: <project-dir>/web/WEB-INF/glassfish-web.xml <glassfish-web-app> ... <security-role-mapping> <role-name>FormRole</role-name> <principal-name>praz.form</principal-name> </security-role-mapping> ... </glassfish-web-app>
  • 86. Mendeploy HelloEnterprise Di Project Explorer klik kanan project HelloEnterprise -> Deploy .
  • 87. Untuk membuka aplikasi, akses URL http://localhost:8080/HelloEnterprise-war/form .
  • 88. Otentikasi Berbasis Form Isi username dan password yang telah dipetakan ke role FormRole
  • 90. Skenario Pengujian Pada tutorial sebelumnya, sudah dibuat username: 'praz.basic' dan dipetakan hanya ke peran 'BasicRole' yang diberi akses hanya ke direktori /basic .
  • 91. Pada tutorial ini, dibuat username: 'praz.form' dan dipetakan hanya ke peran 'FormRole' yang diberi akses hanya ke direktori /form .
  • 92. Skenario Pengujian Kedua pengguna harus dapat melakukan otentikasi.
  • 93. Username 'praz.basic' harus dapat mengakses direktori /basic tapi tidak dapat mengakses direktori /form .
  • 94. Username 'praz.form' harus dapat mengakses direktori /form tapi tidak dapat mengakses direktori /basic .
  • 95. Username 'praz.unknown' yang tidak terdaftar harus gagal melakukan otentikasi.
  • 96. 'praz.basic' Mengakses Direktori /basic
  • 97. 'praz.basic' Gagal Mengakses Direktori /form
  • 98. 'praz.form' Mengakses Direktori /form
  • 99. 'praz.form' Gagal Mengakses Direktori /basic
  • 101. Referensi The Java EE 6 Tutorial - Part VII Security (http://download.oracle.com/javaee/6/tutorial/doc/gijrp.html)