Saya telah menggunakan perpustakaan JWT untuk mendekode Token Web Json, dan ingin beralih ke implementasi JWT resmi Microsoft, System.IdentityModel.Tokens.Jwt .
Dokumentasinya sangat jarang, jadi saya mengalami kesulitan mencari cara untuk mencapai apa yang telah saya lakukan dengan perpustakaan JWT. Dengan pustaka JWT, ada metode Dekode yang mengambil JWT yang dikodekan base64 dan mengubahnya menjadi JSON yang kemudian dapat dideserialisasi. Saya ingin melakukan sesuatu yang serupa menggunakan System.IdentityModel.Tokens.Jwt, tetapi setelah cukup banyak menggali, tidak dapat mengetahui caranya.
Untuk apa nilainya, saya membaca token JWT dari cookie, untuk digunakan dengan kerangka identitas Google.
Bantuan apa pun akan dihargai.
Jawaban:
Di dalam paket ada kelas yang disebut
JwtSecurityTokenHandler
berasal dariSystem.IdentityModel.Tokens.SecurityTokenHandler
. Dalam WIF ini adalah kelas inti untuk deserialising dan serialing security token.Kelas memiliki
ReadToken(String)
metode yang akan mengambil string JWT berenkode base64 Anda dan mengembalikan aSecurityToken
yang mewakili JWT.The
SecurityTokenHandler
juga memilikiValidateToken(SecurityToken)
metode yang mengambilSecurityToken
dan membuat fileReadOnlyCollection<ClaimsIdentity>
. Biasanya untuk JWT, ini akan berisi satuClaimsIdentity
objek yang memiliki sekumpulan klaim yang mewakili properti JWT asli.JwtSecurityTokenHandler
mendefinisikan beberapa kelebihan tambahan untukValidateToken
, khususnya,ClaimsPrincipal ValidateToken(JwtSecurityToken, TokenValidationParameters)
kelebihan beban. TheTokenValidationParameters
argumen memungkinkan Anda untuk menentukan sertifikat penandatanganan tanda (sebagai daftarX509SecurityTokens
). Ini juga memiliki kelebihan beban yang menjadikan JWT sebagaistring
alih - alihSecurityToken
.Kode untuk melakukan ini agak rumit, tetapi dapat ditemukan di kode (
TokenValidationHandler
kelas) Global.asax.cx dalam contoh pengembang yang disebut "ADAL - Layanan Native App to REST - Otentikasi dengan ACS melalui Dialog Browser", yang terletak dihttp://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc
Alternatifnya,
JwtSecurityToken
kelas memiliki metode tambahan yang tidak berada padaSecurityToken
kelas dasar , sepertiClaims
properti yang mendapatkan klaim yang terkandung tanpa melaluiClaimsIdentity
collection. Ia juga memilikiPayload
properti yang mengembalikanJwtPayload
objek yang memungkinkan Anda mendapatkan JSON mentah dari token. Itu tergantung pada skenario Anda, pendekatan mana yang paling tepat.Dokumentasi umum (yaitu khusus non JWT) untuk
SecurityTokenHandler
kelas ada dihttp://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.securitytokenhandler.aspx
Bergantung pada aplikasi Anda, Anda dapat mengonfigurasi penangan JWT ke dalam pipeline WIF persis seperti penangan lainnya.
Ada 3 sampel yang digunakan dalam berbagai jenis aplikasi di
http://code.msdn.microsoft.com/site/search?f%5B0%5D.Type=SearchText&f%5B0%5D.Value=aal&f%5B1%5D.Type=User&f%5B1%5D.Value=Azure% 20AD% 20Pengembang% 20Pengalaman% 20Tim & f% 5B1% 5D. Teks = Azure% 20AD% 20Pengembang% 20Pengalaman% 20Tim
Mungkin, satu akan sesuai dengan kebutuhan Anda atau setidaknya dapat beradaptasi dengan mereka.
sumber
Saya hanya ingin tahu mengapa menggunakan beberapa pustaka untuk decoding dan verifikasi token JWT.
Token JWT yang dikodekan dapat dibuat menggunakan kodesemu berikut
Ini sangat mudah dilakukan tanpa perpustakaan khusus. Menggunakan kode berikut:
Token decoding adalah versi kebalikan dari kode di atas. Untuk memverifikasi tanda tangan Anda perlu sama dan membandingkan bagian tanda tangan dengan tanda tangan terhitung.
UPDATE: Bagi mereka yang sedang berjuang bagaimana melakukan encoding / decoding urlsafe base64, silakan lihat pertanyaan SO lainnya , dan juga wiki dan RFC
sumber