Successfully reported this slideshow.

Mengamankan Aplikasi Java EE 6

954 views

Published on

Mengamankan Komponen Web dengan Otentikasi Berbasis Form

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Mengamankan Aplikasi Java EE 6

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

×