0

私は一般的に ACS、WIF、およびフェデレーション ID に慣れていませんが、WIF SDK トレーニング キット (および ACS サンプル) の例に取り組んできました。 FP として ACS を設定した ASP.NET MVC WebAPI ベースの REST サービス (Azure でホスト)。ブラウザを使用して REST サービス ( http://jordan-helloacs.cloudapp.net )をテストすると、従来の「パッシブ認証」エクスペリエンスが得られ、Live ID または Google ( ACS に 2 つの IP を)。

ただし、を使用して使用可能な IP を取得する単純な WPF アプリケーションを使用して、「パッシブ/アクティブ」エクスペリエンスを実現しようとしています。

"https://[myACSnamespace].accesscontrol.windows.net/v2/metadata/IdentityProviders.js?protocol=javascriptnotify&realm=http://jordan-helloacs.cloudapp.net/&version=1.0",

ACS のエンドポイントを使用して使用可能な IP を一覧表示し、WebBrowser コントロールをホストしてその IP へのログインを処理し、ACS から返された ACS トークンを抽出し、(RestSharp を使用して) httpでエンドポイントに GET 呼び出しを行います。 //jordan-helloacs.cloudapp.net . トークンの抽出に成功しました (SWT と SAML2 の両方を試しました) が、WebBrowser コントロールからトークンを取得した後、トークンをどうする必要があるかわかりません。トークンの前に「OAUTH」または「WRAP access_token =」が追加され、「Authorization」ヘッダーに渡されたいくつかの異なる例を見てきましたが、私が行っていることは何も機能していないようです。私の RestSharp クライアントは、ACS サインイン ページに 302 を取得し続けます。

私が間違っているかもしれないことに関するヒントはありますか?認証ヘッダー形式を指定する方法を知るにはどうすればよいですか?

4

1 に答える 1

0

HTTPヘッダーまたはクエリ文字列を介して、または以下の形式でSWTトークンを渡す方法に関する詳細情報を書いています。

HTTP ヘッダーでトークンを渡す場合、「Authorization」ヘッダーを使用することが期待されます。このヘッダーの値には、WRAP access_token="tokenstring" というテキストが含まれており、URL エンコードする必要はありません。

string headerValue = string.Format("WRAP access_token=\"{0}\"", HttpUtility.UrlDecode(token)); 
var client = new WebClient();            
client.Headers.Add("Authorization", headerValue);

「クエリ文字列」または「フォーム」コンテンツのいずれかでトークンを渡す場合は、wrap_access_token=tokenstring としての名前/値のペアを使用し、HTTP 要求を構築するために URL エンコードする必要があります。

var values = new NameValueCollection();
values.Add("wrap_access_token", token);
var client = new WebClient();
client.UploadValues("BartenderWebservice", "POST", values));

上記の方法のいずれかを使用して、以下のようにストリームをクライアントに渡すことができます。送信したら、Fiddler またはその他のユーティリティを使用してヘッダーが正しいことを確認してください。

Stream stream = client.OpenRead(@"http://yourwcfservice.cloudapp.net/RESTfulWCFServiceEndPoint.svc/_users_");
StreamReader reader = new StreamReader(stream);
String response = reader.ReadToEnd();

前述のように、RestFulWCF エンドポイントへの接続中に 302 エラー (ACS URL に転送) が表示されます。IIS ロギングが有効になっている場合にのみ、実際に Azure VM に RDP を送信し、アプリケーション イベント ログでこのエラーの詳細を確認できます。このエラーがイベント ログに記録されていることを確認し、発生した理由に関する詳細情報を提供します。web.config の何らかの設定がこの問題を引き起こしている可能性があります。

後で追加

トークンを取得する最後の ASPNet MVC シナリオでは、Cookie が作成され、その Cookie が認証を示す ASP Net アプリに渡されます。トップレベルでは、それを機能させるために似たようなものをシミュレートする必要があります。

注:決して正確な答えではありませんが、このスペースを「答えとして」使用して、より適切に表現するためにフォーマットされたコメントを書く必要がありました。

于 2012-05-21T19:41:20.973 に答える