1

OAuth2 を使用して、コード ビハインドで c# を使用して、asp.net 4.0 Web サイトで認証技術を提供しています。最近、私が作成したコードで Windows Live API が機能していないことに気付きました。呼び出しを行い、Live からアクセス トークンを取得していますが、スタックしています。送り返すクエリ文字列の先頭に # を追加しているので、次のタイプの URL をライブで送り返します

...mypage.aspx?#access_token=43t78fehef83jfvwenj3...

# が追加される前は、返されたクエリ文字列を取得し、次のコマンドでアクセス トークンを解析するだけでした。

accessToken = Request.QueryString["access_token"];

ハッシュを追加すると、ハッシュがページをだましてアンカーであると思わせるため、そのクエリ文字列を取得できなくなります。ローカル変数のデバッグを確認すると、常に空のクエリ文字列になってしまい、実際の文字列を取得する方法がわからないため、アクセス トークンを解析できません。

クエリ文字列を取得する方法についてのアイデアはありますか?

ありがとう

4

1 に答える 1

0

URL ハッシュ フラグメント ( の後の部分#) は、ユーザー エージェント ブラウザーから Web サーバーに送信されません。したがって、それを解析してサーバーに送信するには、クライアント側 (おそらく JavaScript) のコードが必要になります。

ハッシュ フラグメント パラメータを解析して JavaScript 配列に入れる簡単なコードを次に示します。

// parse the query string
// from http://oauthssodemo.appspot.com/step/2
var params = {}, queryString = location.hash.substring(1),
    regex = /([^&=]+)=([^&]*)/g, m;
while (m = regex.exec(queryString)) {
  oauthParams[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}

次に、AJAX またはその他の手法を使用して、これらの値を Web サーバーに戻します。サーバー側でアクセス トークンが必要な場合は、そこで解析できます。

もちろん、すべてのコードがサーバー側である場合は、Windows Live で利用できる認証コード フローを使用することもできます。

http://msdn.microsoft.com/en-us/library/live/hh243647.aspx#authcodegrant

これにより、メインのクエリ文字列 ( ) で認証コードを取得し?code=foo、サーバーから Microsoft へのサーバー間呼び出しをcode行って、それをaccess_token.

于 2012-05-28T18:32:52.690 に答える