0

到着予定時刻 2:

私は、公開されているドキュメントと私の SO の暗号化に関する広範な知識と、OAuth2 実装の最も重要な部分を処理する MSDN の便利なコード例 (署名付き JWT の整合性の検証) を使用して、これらすべてを理解することができました。

ブログで 3 部構成のシリーズで詳しく説明しています。

重要なコンポーネントは、OAuth2 プロバイダーからの JWT 応答の整合性を検証することです。多くの開発者は、暗号化機能の理解が不十分なため、これを適切に実装できません。そのため、さまざまなプロバイダー (Google を含む) の公開ドキュメントでは、既存の認証を処理するライブラリ。

問題は、DotNetOpenAuth が何も更新されていないことです。認証に古いライブラリを使用することはお勧めしません。どのセキュリティ ホールにパッチが適用されていないか分からないからです。

C# の検証コンポーネントは RSAPKCS1SignatureDeformatter.VerifySignature を利用します。この方法に関する MSDN の記事のサンプル コードは、署名付き JWT が有効であり、悪意のある第三者によって傍受されていないことを確認するために使用する必要があるものとほぼ同じです。パーティ。

到着予定時刻:

これを Stack Overflow に投稿しているのは、Google が Google の OAuth2 API に関する質問、ヘルプ、サポートのために google-oauth2 タグを使用して、具体的にユーザーを Stack Overflow に誘導しているためです。この発表に見られるように、すべての Google OAuth2 サポートの Stack Overflow への移行は 2013 年 3 月に実装されました。

https://groups.google.com/forum/#!forum/oauth2-dev

シナリオ:

サードパーティのユーザー サインオンを使用する新しい ASP.NET C# アプリケーション。最初に Google OAuth2 を実装し、次に他のサービス (Facebook、一般的な OpenID など) に移行します。C# 用の既存のライブラリがあることは知っていますが、サードパーティ製のライブラリはできれば使用したくありません。

長い間 Google の OAuth2 ドキュメントを読み、JWT 仕様を理解した後、私はかなりのことを理解しました。ただし、ユーザーがアプリケーションでアカウントの使用を許可すると、Google から返される Base64 でエンコードされた JWT の 3 番目のセグメントを理解していることを確認しようとしています。

最初の 2 つのセグメントは、Base64 でエンコードされた平文です。それだけです。これは、JavaScriptSerializer で簡単にデコードおよび解析できました。私が行き詰まっているのは 3 番目のセグメントです。これは、Google JWT が有効であり、悪意のあるコードに触れていないことを確認するために使用する必要があることを理解しています。

C# でアプリケーションのコードを記述する前に、OpenSSL を使用して Base64 でデコードされたバイナリ セグメントをデコードしようとしましたが、Google の公開証明書でコンテンツをデコードまたは検証できません。

C# と Google 認証に関する適切なドキュメントはありますか? 私が見つけることができるのは、DotNetOpenAuth または他のライブラリを使用した例だけです。

4

2 に答える 2

2

Pluralsight アカウントをお持ちの場合は、Dominick Baier による優れたコースがあり、これをカバーするセクションがあります(「JWT の構造と形式」セクション)。必要に応じて使用できる 10 日間の無料試用版があります。

最初の 2 つのセグメントは、Base64 でエンコードされた平文です。それだけです。これは、JavaScriptSerializer で簡単にデコードおよび解析できました。私が行き詰まっているのは 3 番目のセグメントです。これは、Google JWT が有効であり、悪意のあるコードに触れていないことを確認するために使用する必要があることを理解しています。

Dominick によると、3 番目のセグメントを取得するには、最初の 2 つのセグメントを base-64 でエンコードし、それらをピリオド文字で連結してから、alg(最初のセグメントにある) ヘッダーの要素で指定された署名アルゴリズムを実行します。次に、結果をbase-64すると、3番目のセグメントが得られます-これもピリオドで区切られています.

ただし、Google でさえ主要なドキュメントで次のように述べていることを指摘しておく必要があります。

この相互作用のメカニズムでは、アプリケーションが JSON Web トークン (JWT) を作成して暗号署名する必要があります。開発者は、ライブラリを使用してこれらのタスクを実行することを強くお勧めします。トークンの作成と署名を抽象化するライブラリを使用せずにこのコードを記述すると、エラーが発生しやすくなり、アプリケーションのセキュリティに深刻な影響を与える可能性があります。

DotNetOpenAuth は既にこれを行っているため、おそらくこれが最善の方法です。DotNetOpenAuth ですぐに使用できる Google OAuth2 実装を探している場合は、私のものを試すことができます。Nuget ではすでに数千回ダウンロードされているので、あなただけではありません。

DNOA が維持されていないことに関しては、Andrew Arnott が主任開発者を辞任するという決定に言及していると思います。それは本当です、そして私たちは彼がうまくいくことを願っています。しかし、それは DNOA がまったくサポートまたは保守されていないという意味ではありません。それは、個人や企業ではなく、コミュニティによってサポートされていることを意味します. StackOverflow またはDNOA Google Groupで、引き続きヘルプとサポートを受けることができます。

于 2013-08-21T23:14:59.893 に答える
0

主な OAuth 2 ドキュメントに従ってください: https://developers.google.com/accounts/docs/OAuth2

良い例が必要な場合は、言語が比較的近いため、Java の例を探してみてください。

于 2013-08-21T22:47:25.453 に答える