首页 新闻 会员 周边

OAuth 2.0怎么自定义授权失败信息

0
悬赏园豆:30 [已解决问题] 解决于 2018-07-31 17:13
        /// <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。

txworld的主页 txworld | 初学一级 | 园豆:49
提问于:2018-07-30 11:44
< >
分享
最佳答案
0

错误能抛出来吗,

然后在异常统一处理地方设置需要的格式。

收获园豆:30
放逐人 | 小虾三级 |园豆:694 | 2018-07-30 18:28

这不是异常哦。微软提供了context.SetErro()这个方法可以返回一个Json格式的字符串,但格式定死了。

txworld | 园豆:49 (初学一级) | 2018-07-30 19:25

@txworld: https://stackoverflow.com/questions/26336481/how-to-customize-error-message-of-oauthauthorizationserverprovider/30802382

能搜出来,还是搜下吧。

放逐人 | 园豆:694 (小虾三级) | 2018-07-30 20:54

@找点什么: 万分感谢,原来还是有人遇到这样的问题的。不过,如链接中提问者所说的,context.Response.Write(json);并没起作用,这个之前我也尝试过。

txworld | 园豆:49 (初学一级) | 2018-07-31 09:34

@txworld: 我不清楚你是怎么使用的,它在OWIN管道中应该是起作用的,

然后,回答中有个bug,你看是不是那个问题。

放逐人 | 园豆:694 (小虾三级) | 2018-07-31 11:26

@找点什么: 不清楚,暂时解决不了,统一不了返回的数据格式,先让前端单独处理吧。再次感谢您的帮助。

txworld | 园豆:49 (初学一级) | 2018-07-31 17:13

@txworld: context.Response.Write(json);是可用的,

但即便调用了 context.SetError(“”)

输出是:{"access_token":null,"message":"json 内容"}{"error":" "}

 

就是前面一个{}是context.Response.Write(json)的内容,红色是OWIN管道的处理机制,我猜是没有提供扩展点去改变这边方式,也就是说红色的内容是去不掉的(可能某位高人知道怎么去吧)

 

这样前端还是要特殊处理。或者直接修改源码打包。所以最简单的还是当异常处理吧,严格来说也是异常的。这个问题就这样吧。

放逐人 | 园豆:694 (小虾三级) | 2018-07-31 19:03
其他回答(2)
0

请问下这个问题解决了没?怎么解决呢

分进合击 | 园豆:127 (初学一级) | 2018-11-07 14:31

没找到解决方法,我的做法是交给前端处理,微软坑货,如此显然易见的问题都不能自定义。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2018-11-07 17:39

@txworld: 这个问题我解决了,好在微软把这块开源了,作为一个中间件里面的代码不是很多,并且相对独立,了解OAuth2.0流程,代码每个方法调试一下,就可以完全掌控,各种自定义了。

支持(0) 反对(0) 分进合击 | 园豆:127 (初学一级) | 2018-11-16 20:54

@分进合击: 改源码吗?

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2018-11-17 09:04

@txworld: 是的

支持(0) 反对(0) 分进合击 | 园豆:127 (初学一级) | 2018-11-17 11:56
0
江宁织造 | 园豆:73 (初学一级) | 2020-02-16 01:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册