/ / OAuthWebSecurity.RegisterMicrosoftClientでの不正なリクエスト(400)-c#、authentication、oauth、dotnetopenauth

OAuthWebSecurity.RegisterMicrosoftClientでの不正なリクエスト(400)-c#、authentication、oauth、dotnetopenauth

使っています Microsoft.Web.WebPages.OAuth。登録できました Google, Facebook, Twitter, Stack Exchange, MyOpenID...

今私は追加しようとしています Microsoft Live、だから私は登録しました:

OAuthWebSecurity.RegisterMicrosoftClient("applicationID", "key");

と呼ばれる

OAuthWebSecurity.RequestAuthentication("microsoft", Url.Action("Authorization", new { returnUrl = "/" }));

この時点で、すべてが正常に機能しているので、ログインページにリダイレクトされます。問題は私が戻ってきたときです

OAuthWebSecurity.VerifyAuthentication();

それは言う:

リモートサーバーがエラーを返しました:(400)Bad Request。

私は何をしなければならないのですか?

回答:

回答№1は1

私も同じ問題を抱えていました。たくさんの研究の末、私は出くわしました ソースコードのこのビット コメント付き:

// Only OAuth2 requires the return url value for the verify authenticaiton step

これは、あなたが電話するとき VerifyAuthentication、oauth2プロバイダー(この場合はMicrosoft Live IDプロバイダー)による検証のために、戻りURLを渡すオーバーロードを使用する必要があります。

案の定、私が掘り下げるとき asp.netWebサイトのウォークスルー、コールバックのアクションからのURLとして、実際に戻りURLを返していることがわかりました。

だから代わりに:

OAuthWebSecurity.VerifyAuthentication();

必要なもの:

var returnUrl = Url.Action("Authorization", new { returnUrl = "/" })
OAuthWebSecurity.VerifyAuthentication(returnUrl);

返されるURLは、前に指定したものとまったく同じである必要があります。 RequestAuthentication 方法。


回答№2の場合は0

使用しているリダイレクトドメインは何ですか? (これを行うと)実際のドメイン名を指定したので、ドメイン名がローカルサイトを指すようにする必要があることがわかりました。

回避するために、hostsファイルにエントリを追加して、ドメインが127.0.0.1を指すようにしました(つまり、デバッグしてローカルで実行していたため)。