记.解决Abp vNext在Docker部署,无法使用 Token 认证的问题

处理时间:2020年8月13日

ABP版本: ABP vNext 3.0.5 (当时最新版本)

Docker+Linux

先说说情况

  1. ABP 创建的程序, 使用Docker在Linux上进行部署;
  2. 客户端使用前台端分离,所有验证需要使用Token;
  3. 使用域名+证书来保障安全性;

以上是开发和部署要求,其他的一切正常,使用用户名和密码能获取Token。但是,后来就出现大问题了...

 问题来了!!!

通过Token调用其他API时,出现返回JSON中提示:

Authorization failed! Given policy has not granted.

开始以为是appsettings.json 中的 Authority 配置问题,一直试图修改对应的配置,但没任何改变。

但也有执行正常的情况:

  1. 本地调试没有问题。
  2. 使用IP地址:端口,来调用没有问题。
  3. 使用Web(swagger)没有问题。

    问题显然跟配置了域名有很大关系,但按之前其他程序部署的经验,没有任何错误之处,所以一度进入死胡同。虽然使用IP地址也可以给前端使用,但显示不能满足需要,后来在不断测试和分析,也经不起求(zuo)知(si)欲望,总算有了眉目。

看到以上的日志,总算是有点方向了。哎。。。不容易啊。这里先等等,其实一开始要看到这些提示都不可能,我是在别一段日志中看到线索。

在这段中看到一个IO错误提示,开始还不以为然,后来抱着试一试的想法,对程序作了修改。

IdentityModelEventSource.ShowPII = true;

这段代码需要加在 Startup 的 Configure 中(普通net程序)

Abp是加在 OnApplicationInitialization

public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
    。。。
    IdentityModelEventSource.ShowPII = true;
    。。。

}

这样就能看到隐藏的日志了,这个配置不是解决问题的必要条件。

好了,这样就能看到上面说到的404问题了。

根据以上日志提示,我在浏览器中打入https://{域名}/.well-known/openid-configuration,发现还真的是404,马上使用IP地址(https:/{ip:port}/.well-known/openid-configuration)发现有内容!!总算找到不同了!

这时候又看到了熟悉的单词(.well-known),这货是用来SSL证书验证目录的,配置在Nginx,这就对了,跟域名和证书占上边。马上修改Nginx的配置,注解了Nginx中对应域名的.well-known,回过来使用域名访问API,OK ,再也不是烦人的Authorization failed! Given policy has not granted. 使用其他API都一切正常了。

 

后记:

ABP 是个好东西,但用的人还是少,坑太多了,记下来作个留念。

 


版权声明:本文为li_sj原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。