web-dev-qa-db-ja.com

Web APIで認証に失敗した場合にカスタムメッセージを返す方法

私のWebAPIプロジェクトには、[Authorize]属性で装飾された多数のAPIがあります。

[Authorize]
public HttpResponseMessage GetCustomers()
{
   //my api
}

ユーザーに正しいトークンがない場合、アクセス拒否の例外がユーザーに返されます。

しかし、私が必要なのは、そのような場合には、カスタム応答メッセージを返す必要があるということです。

{
  "StatusCode" : 403,
  "message": "You donot have sufficient permission"
}

認証に失敗した場合にこのカスタムメッセージを返すにはどうすればよいですか。

ご注意ください:

  • Owin-トークンベースの認証を使用しています
  • 私はnotデータベースまたは他の場所にアクセストークンを保存しています。
17
Kgn-web

これにはさまざまな方法がありますが、最良の方法の1つはカスタム認証属性です。AuthorizeAttributeを継承し、HandleUnauthorizedRequest()メソッドをオーバーライドするだけです。

public class CustomAuthorization : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
    {
        actionContext.Response = new HttpResponseMessage
        {
            StatusCode = HttpStatusCode.Forbidden,
            Content = new StringContent("You are unauthorized to access this resource")
        };
    }
}

そして、これを使用します(CustomAuthorizationの代わりにAuthorizeを使用する必要があります)

    [CustomAuthorization]       
    public IHttpActionResult Get()
    {
        return Ok();
    }

それ以外の場合は、クライアント側でステータスコードをキャッチして、選択したカスタムメッセージを表示することもできます。