/// <summary> /// 验证客户端 /// </summary> /// <param name="context"></param> /// <returns></returns> public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) { string clientId; string clientSecret; context.TryGetFormCredentials(out clientId, out clientSecret); //context.TryGetBasicCredentials(out clientId, out clientSecret); //Basic认证 //TODO:读库,验证 if (clientId != "malfy" && clientSecret != "111111") { context.SetError("invalid_client", "client is not valid"); return; } context.OwinContext.Set("as:client_id", clientId); context.Validated(clientId); }
如上面的代码,微软提供了context.SetError(),但往往在实际开发中,我们要定义自己的错误信息格式,比如返回统一格式的json。
错误能抛出来吗,
然后在异常统一处理地方设置需要的格式。
这不是异常哦。微软提供了context.SetErro()这个方法可以返回一个Json格式的字符串,但格式定死了。
@txworld: https://stackoverflow.com/questions/26336481/how-to-customize-error-message-of-oauthauthorizationserverprovider/30802382
能搜出来,还是搜下吧。
@找点什么: 万分感谢,原来还是有人遇到这样的问题的。不过,如链接中提问者所说的,context.Response.Write(json);并没起作用,这个之前我也尝试过。
@txworld: 我不清楚你是怎么使用的,它在OWIN管道中应该是起作用的,
然后,回答中有个bug,你看是不是那个问题。
@找点什么: 不清楚,暂时解决不了,统一不了返回的数据格式,先让前端单独处理吧。再次感谢您的帮助。
@txworld: context.Response.Write(json);是可用的,
但即便调用了 context.SetError(“”)
输出是:{"access_token":null,"message":"json 内容"}{"error":" "}
就是前面一个{}是context.Response.Write(json)的内容,红色是OWIN管道的处理机制,我猜是没有提供扩展点去改变这边方式,也就是说红色的内容是去不掉的(可能某位高人知道怎么去吧)
这样前端还是要特殊处理。或者直接修改源码打包。所以最简单的还是当异常处理吧,严格来说也是异常的。这个问题就这样吧。
请问下这个问题解决了没?怎么解决呢
没找到解决方法,我的做法是交给前端处理,微软坑货,如此显然易见的问题都不能自定义。
@txworld: 这个问题我解决了,好在微软把这块开源了,作为一个中间件里面的代码不是很多,并且相对独立,了解OAuth2.0流程,代码每个方法调试一下,就可以完全掌控,各种自定义了。
@分进合击: 改源码吗?
@txworld: 是的