「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>JWT]]

* 目次 [#u45db361]
#contents

*概要 [#rb87a68b]
jose-jwtを使い倒す。

**特徴 [#o4d29f44]
Readme.md中で、以下の様に述べられている。
-.NETと[[.NET Core]]用の最小 or ゼロ依存のアルティメット[[JWT]]実装
-jose.4.j、Nimbus-JOSE-JWT、json-jwtライブラリとの互換性を広範にテスト。

**[[比較>JWT#r4ac23c8]] [#efad17e4]
ライトユーザー向けではなく、ヘビーユーザー向け。

-クロスプラットフォーム実装
-ClientではなくAuthZサイド実装用

的な。

*詳細 [#jebc97ce]

**機能 [#v9a01dd1]

***[[JWS]] [#l00fa0a9]
署名・検証

***[[JWE]] [#pd6a0dcb]
暗号化・復号化

***ユーティリティ [#n2439696]
・・・

**依存関係 [#da102a96]
以下を使用している。

#ref(browser.png,left,nowrap,参照設定)

***[[CAPI(CSP)、CNG>.NETの署名・暗号化アルゴリズム#fde2f12c]] [#q7931d76]
-実装がある。
--https://github.com/dotnet/corefx/tree/master/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography
--https://github.com/dotnet/corefx/tree/master/src/System.Security.Cryptography.Cng/src/System/Security/Cryptography

-Linuxでは...([[こちら>#cd2d506c]])

***[[OpenSSL>OpenSSL#dbb192d0]] [#l3af4ef0]
-上記の、AlgorithmとX509Certificateでは、更に下位にOpenSSLのNuGetライブラリを参照している。
--Algorithm~
https://github.com/dotnet/corefx/tree/master/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography
--X509Certificate~
https://github.com/dotnet/corefx/tree/master/src/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates

-ネイティブ実装~
ライセンスには各種Linuxディストリビューション毎のネイティブ実装のライセンスが表示されるので、~
当該ライブラリのクロスプラットフォーム対応も完了しているものと考える。
#ref(license.png,left,nowrap,license)

*Linux上 [#j6420fdb]

**[[WSL上での.NET Core開発>Windows Subsystem for Linux#w85d0688]] [#t837eaeb]
「/mnt/c」※ 1 を経由して実行~
※ 1 : DrvFs?のVFSファイルシステムプラグイン。

**[[CNG>.NETの署名・暗号化アルゴリズム#fde2f12c]]が動作しない。 [#cd2d506c]
 Unhandled Exception: System.PlatformNotSupportedException: Windows Cryptography Next Generation (CNG) is not supported on this platform.
    at System.Security.Cryptography.CngKeyBlobFormat.get_EccPrivateBlob()
    at Security.Cryptography.EccKey.New(Byte[] x, Byte[] y, Byte[] d, CngKeyUsages usage)

-ECDsaならX509Certificate2.GetECDsaPrivateKey()で解決可能かもしれない。
--why CngKey.Import is not supported on ubuntu? · Issue #18733 · dotnet/corefx~
https://github.com/dotnet/corefx/issues/18733
--ECDSAなSSL証明書を作ってみる – がとらぼ~
https://gato.intaa.net/net/ecdsa_ssl_cert

**bcrypt.dllが見つからない。 [#mfc25367]
 Unhandled Exception: System.DllNotFoundException: Unable to load DLL 'bcrypt.dll': The specified module or one of its dependencies could not be found.
  (Exception from HRESULT: 0x8007007E)
    at Jose.native.BCrypt.BCryptOpenAlgorithmProvider(IntPtr& phAlgorithm, String pszAlgId, String pszImplementation, UInt32 dwFlags)
    at Jose.AesGcm.OpenAlgorithmProvider(String alg, String provider, String chainingMode)
    at Jose.AesGcm.Encrypt(Byte[] key, Byte[] iv, Byte[] aad, Byte[] plainText)
    at Jose.AesGcmKeyWrapManagement.WrapNewKey(Int32 cekSizeBits, Object key, IDictionary`2 header)
    at Jose.JWT.EncodeBytes(Byte[] payload, Object key, JweAlgorithm alg, JweEncryption enc, Nullable`1 compression, IDictionary`2 extraHeaders, JwtSettings settings)

*参考 [#jda0c6e9]
-NuGet Gallery | jose-jwt~
https://www.nuget.org/packages/jose-jwt/
-dvsekhvalnov/jose-jwt~
https://github.com/dvsekhvalnov/jose-jwt~

**サンプル・コード [#q8a19d35]

***実装 [#q3a5562c]
https://github.com/OpenTouryoProject/SampleProgram/blob/master/Other/jose_jwt_Sample/jose_jwt_Sample/Program.cs

***結果 [#n5e68266]
-出力(on Window)
 JwsAlgorithm.none: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJtci54QGNvbnRvc28uY29tIiwiZXhwIjoxMzAwODE5MzgwfQ.
 JwsAlgorithm.HS256: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJtci54QGNvbnRvc28uY29tIiwiZXhwIjoxMzAwODE5MzgwfQ.dvd5Ak6zcBy0OB7gxVtehT3Ab5NO7XEggon6r_CTSfE
 Decoded: {"sub":"mr.x@contoso.com","exp":1300819380}
 JwsAlgorithm.RS256: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJtci54QGNvbnRvc28uY29tIiwiZXhwIjoxMzAwODE5MzgwfQ.e2bHvaNKCS3H7eRTA2Wl-Yr5UDvLsNH26AG_qBOWXy__vJNSkPagLjvZB7yMTcKDKIOlE5tEw1ttZMgxeHxadrLCzQMYk7QKeqIePuTzGBcLza3JefGsVec_yx4DI1H2A5lvVCtBB3pA3L7HtRDr2qfxesqk_a1tV7EPfGZ4KjQ
 Decoded: {"sub":"mr.x@contoso.com","exp":1300819380}
 JwsAlgorithm.ES256: eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJtci54QGNvbnRvc28uY29tIiwiZXhwIjoxMzAwODE5MzgwfQ.4zIp6hcWRqWzvprKAcwEaWbLx7INcknvOTrNwBxLLlvZeqCG8NOELBReZmrQVpZvqFvNGmlacCWxktwfpO_lfg
 Decoded: {"sub":"mr.x@contoso.com","exp":1300819380}
 JweAlgorithm.DIR, JweEncryption.A128CBC_HS256: eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..Psk4PWhbgJ5SBQZPH4z-bw.8dlABeojYURZVe_hGvfaXdudLevjUknq-QGJhnepbXWPUmv8wU4rvp5kHdL3ZHxs.HR4m7-7cmctPgWLbt32ifw
 Decoded: {"sub":"mr.x@contoso.com","exp":1300819380}
 JweAlgorithm.A256KW, JweEncryption.A256CBC_HS512: eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIn0.AD9liopHl8AXXtfSzwxDYK7lcSoe-bm36jKEirazya15r-QW3cKqqHeO7JhJI6-oxolebrqM6tQrEUmytXgVUnrloyjbfmkJ.GdqQPXeULgijoHTiz3mSDw.NA-YcUrxdJhZWVQTSqOT8n1htLTylP7DaZd-SSeiLpV2KfSgiUd-cAOR8UiqVfAy.cz02bW3JjrNSM2qki1TY2AburxafZPthsRkO4jdodRQ
 Decoded: {"sub":"mr.x@contoso.com","exp":1300819380}
 JweAlgorithm.A256GCMKW, JweEncryption.A256CBC_HS512: eyJhbGciOiJBMjU2R0NNS1ciLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiaXYiOiJtQ19vd0dtdEN2MEYyd25hIiwidGFnIjoiNnVRc0Z6cG9zYkp6NV9EanZIYXNqdyJ9._FAA7PA_psMh37Wqln_AvE6IFvpu9HENupBP2KZXapElHjN80uj4EIsc3z9dVmmGpm3Mb9aca4B8aCoaLC1RNA.ZvST1J6vDRnqtoNsVPJX2A.8DvHDMSdUlK1wEhR9n6XPOzVgj_bKGAZFEvSMytcWj7RtxNUnkCizosMKK1Y2AMe.PTDKfWQk8liccKk1MpXDNy4uhY-9tddCFehmT84JPp4
 Decoded: {"sub":"mr.x@contoso.com","exp":1300819380}
 JweAlgorithm.PBES2_HS256_A128KW, JweEncryption.A256CBC_HS512: eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwicDJjIjo4MTkyLCJwMnMiOiJvd1RpVjNFc3Bza1E2RUNnIn0.FqSi-M5hjv7SzkrufO_lJg1AjY6dU1KzopK28vxovJhAQf8JCmx2YNhdKi3G-fiHRFrFGK9Pi7wXSIHiIE6Qe6mNO8KNcHVv.bRJWD9kV6p1bWgyBvcPZDA.WzyUTsMBGhkzceCaZx4RwvD4wvjLJLd_1CS7n9umm-inaMMiWjf7hE4VftDu9ZYL.KIPnr7eD6ZzoLLXKSqdZTCt8G4bMIqKZzJDUrs5ZVqc
 Decoded: {"sub":"mr.x@contoso.com","exp":1300819380}

-検証
--サイト~
https://jwt.io/
--公開鍵~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/files/resource/X509/SHA256RSA.cer.pem

----
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:暗号化]], [[:.NET Core]], [[:.NET Standard]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS