我在ASP.NET MVC应用程序中使用OWIN Oauth为移动应用程序提供访问令牌。以下是OAuth的设置:OWIN Oauth区分过期和无效令牌
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与消息中的一个场景“未经授权”
public class ApiAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new JsonResult
{
Data = new
{
success = false,
error = "Unauthorized"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
但是返回一个JSON,移动应用程序需要区分服务器对2种情况的响应:访问令牌已过期,或者访问令牌无效(在中间修改.eg)。我不确定我如何实现这一要求。我试图创建一个自定义的访问令牌供应商,从AuthenticationTokenProvider继承,在UseOAuthAuthorizationServer注册它()以上,但两者接收()和ReceiveAsync()当服务器接收到来自移动
我们可以在响应正文中返回错误消息吗? –
@BuiQuangHuy是的,在CustomAccessTokenProvider中,您可以访问context.Response,因此您可以对响应流进行任何操作 –