代码之家  ›  专栏  ›  技术社区  ›  Nich Overend

Blazor服务器应用在发布到本地IIS 10服务器(服务器2019)后未能通过Microsoft身份验证(Azure AD)

  •  0
  • Nich Overend  · 技术社区  · 2 年前

    我在本地测试Blazor服务器应用程序(ASP.NET Core 6.0)已经有一段时间了,没有出现任何问题。它通过Azure广告进行认证,一切正常。

    我将其部署到Windows server 2019上的IIS 10服务器(在安装Websockets、ASP.NET托管运行时等之后),现在我无法通过身份验证,无论是在服务器本地还是远程。

    当我点击URL时,它会立即重定向到Microsoft登录页面,在那里我输入用户名(电子邮件),然后输入密码,然后输入2FA挑战,然后输入yes/no stay Loggin in(是/否保持登录)页面,然后它似乎会挂起一小段时间(尽管在选项卡中它会不断地在“工作”和“工作”之间切换)https://login.microsoft.com...)然后它要么提出错误的请求——请求太长,要么就是“我们无法让您登录”。

    如果是错误的请求错误,那么cookie存储将充满。AspNetCore。相关性xxx和。AspNetCore。OpenIdConnectNonce。xxx cookies,这是导致头太长的原因,并创建了错误的请求。如果是“我们无法为您登录”错误,则单击这三个点,然后说“注销并忘记”,将重置下次将导致错误请求的内容。

    Screenshot of network calls

    为了确认我没有做任何蠢事,我使用Blazor服务器模板创建了一个新的空白应用程序,并将其部署到我的应用程序中。同样的事情发生了。我可以在VS中本地运行它,但在发布到IIS后,出现了完全相同的身份验证错误。

    有人有什么想法或建议吗?

    0 回复  |  直到 2 年前
        1
  •  1
  •   Nich Overend    2 年前

    好吧,对于将来发现这个的人。。。这是一个简单的解决方案——但在深入查看之前,不会有任何错误消息指向它。

    当我设置我的应用程序和Blazor模板应用程序时,我让架子工设置它们,并从Azure API获取一个秘密,它将其放入我当地的秘密商店。

    当我将应用发布到IIS时,ClientSecret没有被复制。

    快速修复方法是简单地将客户机机密放入appsettings。json文件,此时一切都很好。较长的解决方案是使用基于服务器的秘密存储。

    显然,这种循环是由客户机密不存在造成的(