Pertanyaan Menggunakan RequestFilter untuk Melakukan Otentikasi Kustom di ServiceStack


Merek baru untuk ServiceStack, jadi maafkan saya jika ini mudah.

Saya menulis API yang akan menggunakan header HTTP khusus untuk informasi autentikasi. Saya telah menambahkan RequestFilter seperti ini:

RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
    if(httpReq.Headers["MyMagicHeader"] != "magic")
    {
        throw HttpError.Unauthorized("Unauthorized");
    }
    else
    {
        //TODO: Populate a "Client" object accessible by the Service
    }
});

Pertanyaan saya adalah, bagaimana saya sekarang dapat memberikan layanan yang dimaksud dengan objek "Klien" yang saya buat berdasarkan nilai di header sihir?

Dari kelihatannya, satu-satunya pilihan saya adalah menyampaikan informasi ini melalui DTO. Jadi saya berpikir untuk menambahkan kelas dasar yang diwarisi oleh semua DTO saya, dan kelas dasar ini akan berisi properti Klien.

Apakah itu pendekatan yang benar?


4
2018-04-24 15:49


asal


Jawaban:


Cara untuk menyampaikan informasi apa pun yang tersedia di semua Filter dan Layanan dalam permintaan yang sama adalah dengan menggunakan httpReq.Items Kamus objek, mis. Dictionary<string,object>"

RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
    if(httpReq.Headers["MyMagicHeader"] != "magic")
    {
        throw HttpError.Unauthorized("Unauthorized");
    }
    else
    {
        //TODO: Populate a "Client" object accessible by the Service
        httpReq.Items["MagicToken"] = CreateMagicValue(httpReq.Headers["MyMagicHeader"]);
    }
});

3
2018-04-24 16:37