【问题标题】:Override error code on AuthorizationCodeProvider.Create覆盖 AuthorizationCodeProvider.Create 上的错误代码
【发布时间】:2015-07-30 13:58:04
【问题描述】:

本题是关于在 Asp.net Wep Api 中使用 Owin 实现授权码流程的。

我试图处理一些在我的 AuthorizationCode 代码创建时可能发生的错误。显然,我无法使用正确的错误代码“server_error”将自己重定向到客户端重定向 URI

以下是我的代码:

private static void CreateAuthorizationCode(AuthenticationTokenCreateContext context)
{
    try
    {
        //Some Code to create and save the AuthorizationCode that can throw an Exception
        context.SetToken(code);
    }
    catch (Exception ex)
    {
        logger.Fatal(ex);
        var redirectUri = GetRedirectUri();
        var redirectLocation = string.Format("{0}?code={1}", redirectUri, "server_error");
        context.Response.Redirect(redirectLocation);
    }
}

但是我被框架重定向到带有 https://redirecturi?error=unsupported_response_type 的重定向 Uri !

这是正常行为吗?或者也许有任何其他方法可以处理这种情况并自己设置错误代码!?

PS:我在 Github 上创建了一个关于该问题的问题:https://github.com/aspnet/Security/issues/375 目前没有答案!

谢谢。

【问题讨论】:

    标签: oauth-2.0 asp.net-web-api2 owin katana


    【解决方案1】:

    这是正常行为吗?或者也许还有其他方法可以处理我错过的那种情况?

    正常,我不知道。但可以肯定的是:当使用 IAuthenticationTokenProvider 时,您不应该更改 HTTP 响应。

    为什么我无法使用 AuthenticationTokenCreateContext 对象(如 context.SetError("my_error") )自行设置错误?

    ValidateAuthorizeRequest 通知不同,它并非旨在让您返回错误。

    遗憾的是,无法从 IAuthenticationTokenProvider 返回 server_error 响应,因为如果您不提供授权代码,OAuthAuthorizationServerHandler 将始终使用 unsupported_response_typehttps://github.com/jchannon/katanaproject/blob/master/src/Microsoft.Owin.Security.OAuth/OAuthAuthorizationServerHandler.cs#L204

    仅供参考,这是我们最近在AspNet.Security.OpenIdConnect.Server(Katana 3 附带的 OAuth2 授权服务器的一个分支)中修复的问题:https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/issues/112#issuecomment-125040925。如果您的自定义代码返回null 授权代码,则server_error 响应将自动返回给客户端应用程序。

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2013-05-28
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 2021-03-03
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多