zoukankan      html  css  js  c++  java
  • 如何自定义oauthauthorizationserverprovider错误信息?

    We are using the OAuthAuthorizationServerProvider class to do authorization in our ASP.NET Web Api app.

    If the provided username and password is invalid in GrantResourceOwnerCredentials, the call

    context.SetError( "invalid_grant", "The user name or password is incorrect." );
    

    Produces the following Json result:

    {
        "error": "invalid_grant",
        "error_description": "The user name or password is incorrect."
    }
    

    Is there any way to customize this error result?
    I would like to make it consistent with default error message format used in other parts of the API:

    {
        "message": "Some error occurred."
    }
    

    Is this possible to achieve with the OAuthAuthorizationServerProvider?

    2016年10月12日24分24秒

     

    This is how I did it.

    string jsonString = "{"message": "Some error occurred."}";
    
    // This is just a work around to overcome an unknown internal bug. 
    // In future releases of Owin, you may remove this.
    context.SetError(new string(' ',jsonString.Length-12)); 
    
    context.Response.StatusCode = 400;
    context.Response.Write(jsonString);
    

    2016年10月11日24分24秒

     

    +1 for Dasun's answer. Here is how I extended it a bit further.

    public class ErrorMessage
    {
        public ErrorMessage(string message)
        {
            Message = message;
        }
    
        public string Message { get; private set; }
    }
    
    public static class ContextHelper
    {
        public static void SetCustomError(this OAuthGrantResourceOwnerCredentialsContext context, string errorMessage)
        {
            var json = new ErrorMessage(errorMessage).ToJsonString();
    
            context.SetError(json);
            context.Response.Write(json);
        }
    }
    

    The .ToJsonString() is another extension method that uses the Newtonsoft.Json library.

    public static string ToJsonString(this object obj)
        {
            return JsonConvert.SerializeObject(obj);
        }
    

    Usage:

    context.SetCustomError("something went wrong");
  • 相关阅读:
    Redis缓存穿透,缓存击穿,缓存雪崩
    Redis持久化机制
    Docker小白到实战之常用命令演示,通俗易懂
    分布式事务最终一致性-CAP框架轻松搞定
    gRPC四种模式、认证和授权实战演示,必赞~~~
    Docker小白到实战之开篇概述
    郑州 | 7月20日,想想都后怕
    避不开的分布式事务
    c++实现十大经典排序算法
    浏览器缓存机制总结
  • 原文地址:https://www.cnblogs.com/firstcsharp/p/5953423.html
Copyright © 2011-2022 走看看