2016-04-30 2 views
4

私はOAuthGrantResourceOwnerCredentialsこの方法をオーバーライド:OAuthのトーク​​ンとカスタムエラー

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
{ 
    using (var userManager = _userManagerFactory()) 
    { 
     var user = await userManager.FindAsync(context.UserName, context.Password); 

     if (user == null) 
     { 
      context.Rejected(); 
      context.SetError("invalid_grant", "Invalid username or password"); 
      return; 
     } 

トークンエンドポイント:

OAuthOptions = new OAuthAuthorizationServerOptions 
     { 
      AuthenticationMode = AuthenticationMode.Active, 
      TokenEndpointPath = new PathString("/Token"), 

それは作品と私はエラークライアント側を受信します。

responseText: "{"error":"invalid_grant"...ame or password"}" 
responseJSON: Object { error="invalid_grant", error_description="Invalid username or password"} 
status: 400 
statusText: "Bad Request" 

ここで、カスタムエラーを設定しようとすると、web.configファイル:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="403" subStatusCode="-1"/> 
    <remove statusCode="404" subStatusCode="-1"/> 
    <remove statusCode="500" subStatusCode="-1"/> 
    <error statusCode="403" path="/Error/Unauthorized" responseMode="ExecuteURL"/> 
    <error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL"/> 
    <error statusCode="500" path="/Error/ServerError" responseMode="ExecuteURL"/> 
</httpErrors> 

私は、JSONメッセージなしBad Requestを受け取る:

responseText:"Bad Request" 
status 400 
statusText:"Bad Request" 

私は、カスタムエラーがすべての要求に影響を与え、正常な動作を妨げると思います。

私は、web.configファイルでこれを追加しようとしました:

<location path="Token"> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"> 
     <clear /> 
    </httpErrors> 
    </system.webServer> 
</location> 

これは、運用サーバー上のIIS ExpressしかしIIS 8.5と私の開発マシン上で動作します、それを無視しているようです。

あなたはhereからサンプルプロジェクトをダウンロードすることができます。ちょうどページに行き、ログインボタンを押してください。私もweb.configファイルにコメントしました。

誰かが正しい方向に向かうことができますか?

+0

_「それは作品と私はエラークライアント側を受ける。」_どのエラーコードとあなたはJSONを期待していますか? – khlr

+0

質問を更新しました。 – danyolgiax

+0

最小限の検証可能な例を提供できますか? – khlr

答えて

2

研究の日後、私は最終的にそれが作品に着きます。

私はから設定を上書き変更:に

<location path="Token"> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 

    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"> 
     <clear /> 
    </httpErrors> 

    </system.webServer> 
</location> 

<location path="Token"> 
    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false" /> 

     <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" /> 

    </system.webServer> 
</location> 

誰かが違いを説明できますか?

+1

違いは、あなたはでhttpErrorsをクリアしていて、もうクリアされていないことです。あなたがそれにこだわっていたと聞いて申し訳ありません:)それは起こる... :) – Mzn

0

は、設定にexistingResponse =「パススルー」を設定しようとしたことがありますか?

Source:

+0

それを削除することができます。問題はIIS 8.5ではなぜ機能しないのでしょうか? – danyolgiax

関連する問題