Я использую OWIN Oauth в своем приложении ASP.NET MVC для предоставления токена доступа для мобильных приложений. Вот установка OAuth:OWIN Oauth differentiate expired и invalid token
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/api/authenticate/login"),
Provider = dependencyContainer.GetService<IOAuthAuthorizationServerProvider>(),
RefreshTokenProvider = dependencyContainer.GetService<IAuthenticationTokenProvider>(),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(applicationSettings.AccessTokenLifeTimeInMinutes),
AllowInsecureHttp = true
});
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
У меня также есть пользовательский поставщик и пользовательские обновления маркера поставщика, как вы можете видеть выше. Все работает отлично, когда запрос с мобильного телефона истек или недействительным, я использую пользовательский AuthorizeAttribute вернуть JSON с сообщением «несанкционированным»
public class ApiAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new JsonResult
{
Data = new
{
success = false,
error = "Unauthorized"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
Однако в одном сценарии, мобильные приложения должны дифференцировать ответ от сервера на 2 случая: токен доступа истек, или токен доступа недействителен (.eg изменен в середине). Я не уверен, как я могу реализовать это требование. Я попытался создать маркер пользовательского поставщика доступа, унаследовав от AuthenticationTokenProvider, зарегистрировать его в UseOAuthAuthorizationServer() выше, но и Receive() и ReceiveAsync() не вызывается, когда сервер получает маркер доступа от мобильного
Можем ли мы вернуть сообщение об ошибке в теле ответа, человек? –
@BuiQuangHuy да, в CustomAccessTokenProvider у вас есть доступ к context.Response, чтобы вы могли делать все, что хотите, с помощью потока ответов –