Bingkai Keamanan: Manajemen Sesi

Produk/Layanan Artikel
Microsoft Azure AD
Perangkat IoT
Azure Document DB
ADFS
Server Identitas
Aplikasi Web
API Web

Menerapkan proses keluar yang tepat menggunakan metode ADAL saat menggunakan Microsoft Azure AD

Judul Detail
Komponen Azure Active Directory
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi T/A
Langkah-Langkah Jika aplikasi bergantung pada token akses yang dikeluarkan oleh Microsoft Azure AD, penanganan aktivitas keluar harus menelepon

Contoh

HttpContext.GetOwinContext().Authentication.SignOut(OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType)

Contoh

Hal ini juga harus menghancurkan sesi pengguna dengan memanggil metode Session.Abandon(). Metode berikut menunjukkan implementasi proses keluar pengguna yang aman:

    [HttpPost]
        [ValidateAntiForgeryToken]
        public void LogOff()
        {
            string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
            AuthenticationContext authContext = new AuthenticationContext(Authority + TenantId, new NaiveSessionCache(userObjectID));
            authContext.TokenCache.Clear();
            Session.Clear();
            Session.Abandon();
            Response.SetCookie(new HttpCookie("ASP.NET_SessionId", string.Empty));
            HttpContext.GetOwinContext().Authentication.SignOut(
                OpenIdConnectAuthenticationDefaults.AuthenticationType,
                CookieAuthenticationDefaults.AuthenticationType);
        } 

Menggunakan masa pakai terbatas untuk token SaS yang dihasilkan

Judul Detail
Komponen Perangkat IoT
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi T/A
Langkah-Langkah Token SaS yang dihasilkan untuk mengautentikasi ke Azure IoT Hub harus memiliki periode kedaluwarsa yang terbatas. Jaga agar masa pakai token SaS tetap minimum untuk membatasi jumlah waktu mereka dapat diputar ulang jika token telah disusupi.

Menggunakan masa pakai token minimum untuk token Resource yang dihasilkan

Judul Detail
Komponen Azure Document DB
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi T/A
Langkah-Langkah Kurangi rentang waktu token sumber daya ke nilai minimum yang diperlukan. Token sumber daya memiliki rentang waktu valid default 1 jam.

Menerapkan proses keluar yang tepat menggunakan metode WsFederation saat menggunakan ADFS

Judul Detail
Komponen ADFS
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi T/A
Langkah-Langkah Jika aplikasi bergantung pada token STS yang dikeluarkan oleh ADFS, penanganan aktivitas keluar harus memanggil metode WSFederationAuthenticationModule.FederatedSignOut() untuk memproses keluar pengguna. Sesi saat ini juga harus dihancurkan, dan nilai token sesi harus direset dan dibatalkan.

Contoh

        [HttpPost, ValidateAntiForgeryToken]
        [Authorization]
        public ActionResult SignOut(string redirectUrl)
        {
            if (!this.User.Identity.IsAuthenticated)
            {
                return this.View("LogOff", null);
            }

            // Removes the user profile.
            this.Session.Clear();
            this.Session.Abandon();
            HttpContext.Current.Response.Cookies.Add(new System.Web.HttpCookie("ASP.NET_SessionId", string.Empty)
                {
                    Expires = DateTime.Now.AddDays(-1D),
                    Secure = true,
                    HttpOnly = true
                });

            // Signs out at the specified security token service (STS) by using the WS-Federation protocol.
            Uri signOutUrl = new Uri(FederatedAuthentication.WSFederationAuthenticationModule.Issuer);
            Uri replyUrl = new Uri(FederatedAuthentication.WSFederationAuthenticationModule.Realm);
            if (!string.IsNullOrEmpty(redirectUrl))
            {
                replyUrl = new Uri(FederatedAuthentication.WSFederationAuthenticationModule.Realm + redirectUrl);
            }
           //     Signs out of the current session and raises the appropriate events.
            var authModule = FederatedAuthentication.WSFederationAuthenticationModule;
            authModule.SignOut(false);
        //     Signs out at the specified security token service (STS) by using the WS-Federation
        //     protocol.            
            WSFederationAuthenticationModule.FederatedSignOut(signOutUrl, replyUrl);
            return new RedirectResult(redirectUrl);
        }

Menerapkan proses keluar yang tepat menggunakan Server Identitas

Judul Detail
Komponen Server Identitas
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi Proses Keluar IdentityServer3-Federated
Langkah-Langkah IdentityServer mendukung kemampuan untuk federasi dengan penyedia identitas eksternal. Ketika pengguna keluar dari penyedia identitas upstream, tergantung pada protokol yang digunakan, mungkin untuk menerima pemberitahuan ketika pengguna keluar. Hal ini memungkinkan IdentityServer untuk memberi tahu kliennya sehingga mereka juga dapat memproses keluar pengguna. Periksa dokumentasi di bagian referensi untuk detail implementasi.

Aplikasi yang tersedia melalui HTTPS harus menggunakan cookie aman

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut EnvironmentType - OnPrem
Referensi Elemen httpCookies (ASP.NET Pengaturan Skema), Properti HttpCookie.Secure
Langkah-Langkah Cookie biasanya hanya dapat diakses oleh domain yang cakupannya tercakup. Sayangnya, definisi "domain" tidak termasuk protokol sehingga cookie yang dibuat melalui HTTPS dapat diakses melalui HTTP. Atribut "aman" menunjukkan kepada browser bahwa cookie hanya boleh tersedia melalui HTTPS. Pastikan bahwa semua cookie yang diatur melalui HTTPS menggunakan atribut aman. Persyaratan dapat diberlakukan dalam file web.config dengan mengatur atribut requireSSL ke true. Ini adalah pendekatan yang disukai karena akan memberlakukan atribut aman untuk semua cookie saat ini dan yang akan datang tanpa perlu membuat perubahan kode tambahan.

Contoh

<configuration>
  <system.web>
    <httpCookies requireSSL="true"/>
  </system.web>
</configuration>

Pengaturan diberlakukan bahkan jika HTTP digunakan untuk mengakses aplikasi. Jika HTTP digunakan untuk mengakses aplikasi, pengaturan memutus aplikasi karena cookie diatur dengan atribut aman dan browser tidak akan mengirimnya kembali ke aplikasi.

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Web Forms, MVC5
Atribut EnvironmentType - OnPrem
Referensi T/A
Langkah-Langkah Ketika aplikasi web adalah Pihak Yang Mengandalkan, dan IdP adalah server ADFS, atribut aman token FedAuth dapat dikonfigurasi dengan mengatur requireSSL ke True di bagian system.identityModel.services web.config:

Contoh

  <system.identityModel.services>
    <federationConfiguration>
      <!-- Set requireSsl=true; domain=application domain name used by FedAuth cookies (Ex: .gdinfra.com); -->
      <cookieHandler requireSsl="true" persistentSessionLifetime="0.0:20:0" />
    ....  
    </federationConfiguration>
  </system.identityModel.services>
Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi Atribut Cookie Aman
Langkah-Langkah Untuk mengurangi risiko pengungkapan informasi dengan serangan scripting lintas situs (XSS), atribut baru - httpOnly - diperkenalkan ke cookie dan didukung oleh semua browser utama. Atribut menentukan bahwa cookie tidak dapat diakses melalui skrip. Dengan menggunakan cookie HttpOnly, aplikasi web mengurangi kemungkinan bahwa informasi sensitif yang terkandung dalam cookie dapat dicuri melalui skrip dan dikirim ke situs web penyerang.

Contoh

Semua aplikasi berbasis HTTP yang menggunakan cookie harus menentukan HttpOnly dalam definisi cookie, dengan menerapkan konfigurasi berikut dalam web.config:

<system.web>
.
.
   <httpCookies requireSSL="false" httpOnlyCookies="true"/>
.
.
</system.web>
Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Formulir Web
Atribut T/A
Referensi Properti FormsAuthentication.RequireSSL
Langkah-Langkah Nilai properti RequireSSL diatur dalam file konfigurasi untuk aplikasi ASP.NET dengan menggunakan atribut requireSSL dari elemen konfigurasi. Anda dapat menentukan dalam file Web.config untuk aplikasi ASP.NET Anda apakah Keamanan Lapisan Transportasi (TLS), sebelumnya dikenal sebagai SSL (Secure Sockets Layer), diperlukan untuk menampilkan cookie autentikasi formulir ke server dengan mengatur atribut requireSSL.

Contoh

Contoh kode berikut mengatur atribut requireSSL dalam file Web.config.

<authentication mode="Forms">
  <forms loginUrl="member_login.aspx" cookieless="UseCookies" requireSSL="true"/>
</authentication>
Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku MVC5
Atribut EnvironmentType - OnPrem
Referensi Konfigurasi Windows Identity Foundation (WIF) – Part II
Langkah-Langkah Untuk mengatur atribut httpOnly untuk cookie FedAuth, nilai atribut hideFromCsript harus diatur ke True.

Contoh

Konfigurasi berikut menunjukkan konfigurasi yang benar:

<federatedAuthentication>
<cookieHandler mode="Custom"
                       hideFromScript="true"
                       name="FedAuth"
                       path="/"
                       requireSsl="true"
                       persistentSessionLifetime="25">
</cookieHandler>
</federatedAuthentication>

Mitigasi terhadap serangan Pemalsuan Permintaan Antar Situs (CSRF) ASP.NET halaman web

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi T/A
Langkah-Langkah Pemalsuan permintaan antar situs (CSRF atau XSRF) adalah jenis serangan di mana penyerang dapat melakukan tindakan dalam konteks keamanan sesi yang ditetapkan pengguna yang berbeda di situs web. Tujuannya adalah untuk memodifikasi atau menghapus konten, jika situs web yang ditargetkan bergantung secara eksklusif pada cookie sesi untuk mengautentikasi permintaan yang diterima. Penyerang dapat mengeksploitasi kerentanan ini dengan mendapatkan browser pengguna yang berbeda untuk memuat URL dengan perintah dari situs yang rentan di mana pengguna sudah masuk. Ada banyak cara bagi penyerang untuk melakukan itu, seperti dengan menghosting situs web yang berbeda yang memuat sumber daya dari server yang rentan, atau membuat pengguna mengklik tautan. Serangan dapat dicegah jika server mengirim token tambahan ke klien, mengharuskan klien untuk memasukkan token itu dalam semua permintaan di masa mendatang, dan memverifikasi bahwa semua permintaan di masa depan termasuk token yang berkaitan dengan sesi saat ini, seperti dengan menggunakan ASP.NET AntiForgeryToken atau ViewState.
Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku MVC5, MVC6
Atribut T/A
Referensi Pencegahan XSRF/CSRF di ASP.NET MVC dan Halaman Web
Langkah-Langkah Formulir anti-CSRF dan ASP.NET MVC - Gunakan metode pembantu AntiForgeryToken pada Tampilan; masukkan Html.AntiForgeryToken() ke dalam formulir, misalnya,

Contoh

@using (Html.BeginForm("UserProfile", "SubmitUpdate")) { 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken()
    <fieldset> 

Contoh

<form action="/UserProfile/SubmitUpdate" method="post">
    <input name="__RequestVerificationToken" type="hidden" value="saTFWpkKN0BYazFtN6c4YbZAmsEwG0srqlUqqloi/fVgeV2ciIFVmelvzwRZpArs" />
    <!-- rest of form goes here -->
</form>

Contoh

Pada saat yang sama, Html.AntiForgeryToken() memberi pengunjung cookie yang disebut __RequestVerificationToken, dengan nilai yang sama dengan nilai tersembunyi acak yang ditunjukkan di atas. Selanjutnya, untuk memvalidasi postingan formulir masuk, tambahkan filter [ValidateAntiForgeryToken] ke metode tindakan target. Contohnya:

[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
// ... etc.
}

Filter otorisasi yang memeriksa bahwa:

  • Permintaan masuk memiliki cookie yang disebut __RequestVerificationToken
  • Permintaan masuk memiliki entri Request.Form yang disebut __RequestVerificationToken
  • Nilai cookie dan Request.Form ini cocok dengan Asumsi semua baik-baik saja, permintaan berjalan seperti biasa. Tetapi jika tidak, maka kegagalan otorisasi dengan pesan "Token anti-pemalsuan yang diperlukan tidak disediakan atau tidak valid".

Contoh

Anti-CSRF dan AJAX: Token formulir dapat menjadi masalah untuk permintaan AJAX, karena permintaan AJAX mungkin mengirim data JSON, bukan data formulir HTML. Salah satu solusinya adalah mengirim token di header HTTP kustom. Kode berikut menggunakan sintaks Razor untuk menghasilkan token, lalu menambahkan token ke permintaan AJAX.

<script>
    @functions{
        public string TokenHeaderValue()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;                
        }
    }

    $.ajax("api/values", {
        type: "post",
        contentType: "application/json",
        data: {  }, // JSON data goes here
        dataType: "json",
        headers: {
            'RequestVerificationToken': '@TokenHeaderValue()'
        }
    });
</script>

Contoh

Saat Anda memproses permintaan, ekstrak token dari header permintaan. Lalu panggil metode AntiForgery.Validate untuk memvalidasi token. Metode Validasi memberikan pengecualian jika token tidak valid.

void ValidateRequestHeader(HttpRequestMessage request)
{
    string cookieToken = "";
    string formToken = "";

    IEnumerable<string> tokenHeaders;
    if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
    {
        string[] tokens = tokenHeaders.First().Split(':');
        if (tokens.Length == 2)
        {
            cookieToken = tokens[0].Trim();
            formToken = tokens[1].Trim();
        }
    }
    AntiForgery.Validate(cookieToken, formToken);
}
Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Formulir Web
Atribut T/A
Referensi Manfaatkan ASP.NET Bawaan untuk Menangkis Serangan Web
Langkah-Langkah Serangan CSRF di aplikasi berbasis WebForm dapat dimitigasi dengan mengatur ViewStateUserKey ke string acak yang bervariasi untuk setiap pengguna - ID pengguna atau, lebih baik lagi, ID sesi. Untuk sejumlah alasan teknis dan sosial, ID sesi jauh lebih cocok karena ID sesi tidak dapat diprediksi, waktu habis, dan bervariasi berdasarkan per pengguna.

Contoh

Berikut adalah kode yang perlu Anda miliki di semua halaman Anda:

void Page_Init (object sender, EventArgs e) {
   ViewStateUserKey = Session.SessionID;
   :
}

Menyiapkan sesi untuk masa pakai tidak aktif

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi Properti HttpSessionState.Timeout
Langkah-Langkah Waktu sesi habis mewakili aktivitas yang terjadi ketika pengguna tidak melakukan tindakan apa pun di situs web selama interval (didefinisikan oleh server web). Aktivitas, di sisi server, mengubah status sesi pengguna menjadi 'tidak valid' (misalnya "tidak digunakan lagi") dan menginstruksikan server web untuk menghancurkannya (menghapus semua data yang terkandung di dalamnya). Contoh kode berikut mengatur atribut sesi waktu habis menjadi 15 menit dalam file Web.config.

Contoh

<configuration>
  <system.web>
    <sessionState mode="InProc" cookieless="true" timeout="15" />
  </system.web>
</configuration>

Mengaktifkan Deteksi ancaman pada Azure SQL

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Formulir Web
Atribut T/A
Referensi Elemen formulir untuk autentikasi (Skema Pengaturan ASP.NET)
Langkah-Langkah Mengatur batas waktu cookie Tiket Autentikasi Formulir menjadi 15 menit

Contoh

<forms  name=".ASPXAUTH" loginUrl="login.aspx"  defaultUrl="default.aspx" protection="All" timeout="15" path="/" requireSSL="true" slidingExpiration="true"/>
</forms>
Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Web Forms, MVC5
Atribut EnvironmentType - OnPrem
Referensi asdeqa
Langkah-Langkah Ketika aplikasi web adalah Pihak yang Diandalkan dan ADFS adalah STS, masa pakai cookie autentikasi - token FedAuth - dapat diatur dengan konfigurasi berikut di web.config:

Contoh

  <system.identityModel.services>
    <federationConfiguration>
      <!-- Set requireSsl=true; domain=application domain name used by FedAuth cookies (Ex: .gdinfra.com); -->
      <cookieHandler requireSsl="true" persistentSessionLifetime="0.0:15:0" />
      <!-- Set requireHttps=true; -->
      <wsFederation passiveRedirectEnabled="true" issuer="http://localhost:39529/" realm="https://localhost:44302/" reply="https://localhost:44302/" requireHttps="true"/>
      <!--
      Use the code below to enable encryption-decryption of claims received from ADFS. Thumbprint value varies based on the certificate being used.
      <serviceCertificate>
        <certificateReference findValue="4FBBBA33A1D11A9022A5BF3492FF83320007686A" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
      </serviceCertificate>
      -->
    </federationConfiguration>
  </system.identityModel.services>

Contoh

Token klaim SAML yang dikeluarkasn ADFS juga harus diatur ke 15 menit, dengan menjalankan perintah powershell berikut di server ADFS:

Set-ADFSRelyingPartyTrust -TargetName "<RelyingPartyWebApp>" -ClaimsProviderName @("Active Directory") -TokenLifetime 15 -AlwaysRequireAuthentication $true

Menerapkan proses keluar yang tepat dari aplikasi

Judul Detail
Komponen Aplikasi Web
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi T/A
Langkah-Langkah Lakukan Proses Keluar yang tepat dari aplikasi, ketika pengguna menekan tombol keluar. Setelah keluar, aplikasi harus menghancurkan sesi pengguna, dan juga mereset dan membatalkan nilai cookie sesi, bersama dengan reset dan pembatalan nilai cookie autentikasi. Juga, ketika beberapa sesi terkait dengan satu identitas pengguna, mereka harus secara kolektif dihentikan di sisi server pada waktu habis atau proses keluar. Terakhir, pastikan bahwa fungsi Keluar tersedia di setiap halaman.

Mitigasi terhadap serangan Pemalsuan Permintaan Antar Situs (CSRF) API Web ASP.NET

Judul Detail
Komponen API Web
Fase SDL Build
Teknologi yang Berlaku Umum
Atribut T/A
Referensi T/A
Langkah-Langkah Pemalsuan permintaan antar situs (CSRF atau XSRF) adalah jenis serangan di mana penyerang dapat melakukan tindakan dalam konteks keamanan sesi yang ditetapkan pengguna yang berbeda di situs web. Tujuannya adalah untuk memodifikasi atau menghapus konten, jika situs web yang ditargetkan bergantung secara eksklusif pada cookie sesi untuk mengautentikasi permintaan yang diterima. Penyerang dapat mengeksploitasi kerentanan ini dengan mendapatkan browser pengguna yang berbeda untuk memuat URL dengan perintah dari situs yang rentan di mana pengguna sudah masuk. Ada banyak cara bagi penyerang untuk melakukan itu, seperti dengan menghosting situs web yang berbeda yang memuat sumber daya dari server yang rentan, atau membuat pengguna mengklik tautan. Serangan dapat dicegah jika server mengirim token tambahan ke klien, mengharuskan klien untuk memasukkan token itu dalam semua permintaan di masa mendatang, dan memverifikasi bahwa semua permintaan di masa depan termasuk token yang berkaitan dengan sesi saat ini, seperti dengan menggunakan ASP.NET AntiForgeryToken atau ViewState.
Judul Detail
Komponen API Web
Fase SDL Build
Teknologi yang Berlaku MVC5, MVC6
Atribut T/A
Referensi Mencegah Serangan Pemalsuan Permintaan Antar Situs (CSRF) di API Web ASP.NET
Langkah-Langkah Anti-CSRF dan AJAX: Token formulir dapat menjadi masalah untuk permintaan AJAX, karena permintaan AJAX mungkin mengirim data JSON, bukan data formulir HTML. Salah satu solusinya adalah mengirim token di header HTTP kustom. Kode berikut menggunakan sintaks Razor untuk menghasilkan token, lalu menambahkan token ke permintaan AJAX.

Contoh

<script>
    @functions{
        public string TokenHeaderValue()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;                
        }
    }
    $.ajax("api/values", {
        type: "post",
        contentType: "application/json",
        data: {  }, // JSON data goes here
        dataType: "json",
        headers: {
            'RequestVerificationToken': '@TokenHeaderValue()'
        }
    });
</script>

Contoh

Saat Anda memproses permintaan, ekstrak token dari header permintaan. Lalu panggil metode AntiForgery.Validate untuk memvalidasi token. Metode Validasi memberikan pengecualian jika token tidak valid.

void ValidateRequestHeader(HttpRequestMessage request)
{
    string cookieToken = "";
    string formToken = "";

    IEnumerable<string> tokenHeaders;
    if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
    {
        string[] tokens = tokenHeaders.First().Split(':');
        if (tokens.Length == 2)
        {
            cookieToken = tokens[0].Trim();
            formToken = tokens[1].Trim();
        }
    }
    AntiForgery.Validate(cookieToken, formToken);
}

Contoh

Formulir Anti-CSRF dan ASP.NET MVC - Gunakan metode pembantu AntiForgeryToken pada Tampilan; masukkan Html.AntiForgeryToken() ke dalam formulir, misalnya,

@using (Html.BeginForm("UserProfile", "SubmitUpdate")) { 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken()
    <fieldset> 
}

Contoh

Contoh di atas akan menghasilkan sesuatu seperti berikut:

<form action="/UserProfile/SubmitUpdate" method="post">
    <input name="__RequestVerificationToken" type="hidden" value="saTFWpkKN0BYazFtN6c4YbZAmsEwG0srqlUqqloi/fVgeV2ciIFVmelvzwRZpArs" />
    <!-- rest of form goes here -->
</form>

Contoh

Pada saat yang sama, Html.AntiForgeryToken() memberi pengunjung cookie yang disebut __RequestVerificationToken, dengan nilai yang sama dengan nilai tersembunyi acak yang ditunjukkan di atas. Selanjutnya, untuk memvalidasi postingan formulir masuk, tambahkan filter [ValidateAntiForgeryToken] ke metode tindakan target. Contohnya:

[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
// ... etc.
}

Filter otorisasi yang memeriksa bahwa:

  • Permintaan masuk memiliki cookie yang disebut __RequestVerificationToken
  • Permintaan masuk memiliki entri Request.Form yang disebut __RequestVerificationToken
  • Nilai cookie dan Request.Form ini cocok dengan Asumsi semua baik-baik saja, permintaan berjalan seperti biasa. Tetapi jika tidak, maka kegagalan otorisasi dengan pesan "Token anti-pemalsuan yang diperlukan tidak disediakan atau tidak valid".
Judul Detail
Komponen API Web
Fase SDL Build
Teknologi yang Berlaku MVC5, MVC6
Atribut Penyedia Identitas - ADFS, Penyedia Identitas - Microsoft Azure AD
Referensi Amankan API Web dengan Akun Individual dan Proses Masuk Lokal di API Web ASP.NET 2.2
Langkah-Langkah Jika API Web diamankan menggunakan OAuth 2.0, maka API mengharapkan token pembawa di header permintaan Autorisasi dan memberikan akses ke permintaan hanya jika token valid. Tidak seperti autentikasi berbasis cookie, browser tidak melampirkan token pembawa ke permintaan. Klien yang meminta perlu secara eksplisit melampirkan token pembawa di header permintaan. Oleh karena itu, untuk API Web ASP.NET yang dilindungi menggunakan OAuth 2.0, token pembawa dianggap sebagai pertahanan terhadap serangan CSRF. Harap dicatat bahwa jika bagian MVC dari aplikasi menggunakan autentikasi formulir (yaitu, menggunakan cookie), token anti-pemalsuan harus digunakan oleh aplikasi web MVC.

Contoh

API Web harus diberitahu untuk HANYA mengandalkan token pembawa dan bukan pada cookie. Hal ini dapat dilakukan dengan konfigurasi berikut dalam metode WebApiConfig.Register:

config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

Metode SuppressDefaultHostAuthentication memberi tahu API Web untuk mengabaikan autentikasi apa pun yang terjadi sebelum permintaan mencapai alur API Web, baik oleh IIS atau oleh middleware OWIN. Dengan begitu, kita dapat membatasi API Web untuk mengautentikasi hanya menggunakan token pembawa.