AuthenticationTokenProvider:自定义错误消息

时间:2015-09-01 08:48:22

标签: c# asp.net-web-api oauth-2.0 asp.net-identity

我已经实现了我自己的OAuthAuthorizationServerProviderAuthenticationTokenProvider,一切正常但是我想发送错误消息以及更多细节。 在我的刷新令牌出现问题时,我收到以下JSON对象:{"error":"invalid_grant"} 我想要的是什么样的 {"error":"invalid_grant","reason":"here_goes_my_custom_message"}

可以在OAuthAuthorizationServerProvider(比如GrantResourceOwnerCredentials方法)中轻松完成,因为参数中的上下文继承自BaseValidatingContext,因此我可以使用:

if (user == null)
{
   context.Rejected();
   context.SetError("invalid_grant", "The user name or password is incorrect.");
   return;
}

但是我不知道如何在AuthenticationTokenProvider中做类似的事情。我有以下方法:

public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
    {
        string hashedTokenId = Helper.GetHash(context.Token);
        OAuthRefreshToken refreshToken = _oAuthRefreshTokenService.FindRefreshToken(hashedTokenId);

        if (refreshToken != null)
        {
            //Get protectedTicket from refreshToken class
            context.DeserializeTicket(refreshToken.ProtectedTicket);
            var result = _oAuthRefreshTokenService.RemoveRefreshToken(hashedTokenId);
        }
    }

编辑: AuthenticationTokenReceiveContext不是BaseValidatingContext,因此没有SetErrorRejected方法。

我希望在刷新令牌为null时返回自定义错误消息。知道怎么样?

2 个答案:

答案 0 :(得分:0)

作为OP的答案可能会迟到,但我刚刚解决了这个问题,我在这里写下答案,希望其他人能找到答案:

拒绝刷新令牌的方法是来自GrantRefreshToken的{​​{1}}。在OAuthAuthorizationServerProvider

创建授权上下文后调用此方法
AuthenticationTokenProvider

答案 1 :(得分:-3)

要查看JSON对象中的response.data.errorresponse.data.error_description属性,您的代码需要进行细微更改:

if(user == null) {
    context.SetError("invalid_grant", "The user name or password is incorrect.");
    return;
}
相关问题