3

DotNetOpenAuth を使用して、DotNetOpenAuth を持つあるサイトから DotNetOpenAuth を持つ別のサイトに接続し、互いの API を使用できるようにしたいと考えています。目標は、承認を一度行う必要があり、それ以降はお互いに何かを行うことができるようにすることです。どちらも C# キャッスル プロジェクトの 2 つの異なるサイトである必要があります。正直なところ、相互に通信して相互の API を使用する必要があるのは 5 つほどになるので、接続を一度だけ保存して、接続が切れる心配はありません。セッションとトークンを保存するようにデータベースをセットアップしましたが、結局のところ、DotNetOpenAuth のドキュメントはあまり役に立ちません。 ( DotNetOpenAuth api doc のサイトを書いている時点ではダウンしています)このweb.configが私がしなければならないのはセットアップだけですが、それは私には非常に奇妙に思えるかもしれません。

本質的な問題は、あるサイトを別のサイトに許可するように設定し、それを一度だけ保存する方法です。これらのマイクロサイトが最終的にいくつになるかはわかりませんが、双方向の承認された接続を確立してから、互いの API を使用する必要があるだけです。

必要なのは、Web アプリ用に設定されたプロバイダーと Web アプリ用のクライアントの詳細な例だけです。それらは同じ例ではないと確信していますが、どちらの側でも明確な段階を踏んでいるものを見つけるのに苦労しています. いくつかの複雑な例は、MVC の例であり、簡単には核心にたどり着くことができません。

最終的な目標は、(サイト A) が (サイト B) & (サイト C) に接続し、(サイト C) が (サイト A) & (サイト D) に接続することです。つまり、(サイト A),(サイト B) ),(Site C),(Site D) はプロバイダーとクライアントの両方であり、通常は (クライアントの観点から) データベースのセッションでトークンを保存します。プロバイダーを明確に作成する方法とクライアントを作成する方法の例以上のものを用意する必要はありません。残りは保存時に明らかになるからです。

更新私はこの例 を統合しようとしていますが、これは私が見つけることができる最高のものです。問題は、プロバイダーとコンシューマーを含むサイトというよりも、アプリとしてのプロバイダーであるということです。この例の問題は、実際にはファイルと一致していないことです。そして、重要な部分のアイデアをそよ風に吹き込みます。

視覚化された概念

ここに画像の説明を入力

4

2 に答える 2

2

これをAuthorisationServer実装のベースとして使用し、すべての API ソリューションでライブラリを共有できます。

あなたが言及する集中型ソリューションは、さまざまな API 実装の全体的なアーキテクチャをどのように構築するかによって、適切な計画になる可能性があります。すべてをどのようにまとめたいかによって大きく異なるため、その面で何かを提案するのは本当に難しい.

集中型のアプローチを採用した場合、各 API にキーとシークレットを与え、各 API のデータベースの ClientAuthorisation テーブルにエントリを作成する必要があります。私の承認テーブルは、現時点では次のようになっています。

CREATE TABLE [dbo].[ApiClientAuthorizations](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [CreatedUtc] [datetime] NOT NULL,
    [ApiClientId] [bigint] NOT NULL,
    [UserProfileId] [bigint] NOT NULL,
    [Scope] [nvarchar](max) NULL,
    [Expires] [datetime] NULL,

ここで重要なフィールドは、クライアントが持つアクセスのレベルを定義するスコープです。私の知る限り、プロバイダーを実装する必要があるのは、実際に他のシステムがあなたの実装を利用して、あなたのシステムをアイデンティティストアとして使用して独自のサービスを保護できるようにしたい場合だけです。これに対するあなたの要件を満たすために。

多くのサンプルを実際に動作させるには非常に時間がかかることがわかりましたが、サンプルのコードは非常に優れており、内部で実際に何が起こっているかをよりよく理解するために綿密に調査する価値があります。

于 2013-04-26T17:24:30.380 に答える
1

これを実装するためにプロバイダーである必要はありません。認可サーバーの一般的な実装を作成し、各サーバーで通信したい各サイトのデータベース内に手動で認可を設定します。

暗号化には SSL 証明書を使用し、API 呼び出しを承認するために送信される OAuth2.0 トークンを使用しても問題ありません。

于 2013-04-26T12:56:58.643 に答える