使用 Auth0 的 Azure 应用服务 OpenID 身份验证失败:值不能为空。 (参数'rawToken')

Posted

技术标签:

【中文标题】使用 Auth0 的 Azure 应用服务 OpenID 身份验证失败:值不能为空。 (参数\'rawToken\')【英文标题】:Azure App Service OpenID authentication with Auth0 fails: Value cannot be null. (Parameter 'rawToken')使用 Auth0 的 Azure 应用服务 OpenID 身份验证失败:值不能为空。 (参数'rawToken') 【发布时间】:2022-01-17 03:39:03 【问题描述】:

我正在 Azure 中创建应用服务,并尝试使用 Auth0 连接 OpenID Connect 身份验证。

问题:

弹出Auth0的登录页面,可以登录了。 Auth0 使用授权码将浏览器重定向到我的应用的回调 URL。应用返回 HTTP 500 内部服务器错误。

...easyauth_docker.log 表明 Azure 身份验证中间件抛出了以下异常:

... System.ArgumentNullException: Value cannot be null. (Parameter 'rawToken') 2021-12-13T15:40:26.451788664Z at Microsoft.Azure.AppService.Middleware.ModuleUtils.ThrowIfNullOrEmpty(String argName, String argValue) in /EasyAuth/Microsoft.Azure.AppService.Middleware.Modules/ModuleUtils.cs:line 867 2021-12-13T15:40:26.451799664Z at Microsoft.Azure.AppService.Middleware.ModuleUtils.ValidateJwt(String siteName, String rawToken, TokenValidationParameters parameters, String provider, Boolean useLegacyClaims, JwtSecurityToken& jwt, Exception& handledException, Boolean isLoginAction) in /EasyAuth/Microsoft.Azure.AppService.Middleware.Modules/ModuleUtils.cs:line 567 ...

实施:

在 Azure 中使用 Linux/Node.js 创建了应用服务。该应用程序无需身份验证即可使用:https://<MY_APP>.azurewebsites.net。我也可以用 VS Code 调试它。 创建了一个常规 Web 应用程序类型的 Auth0 应用程序(授权码授予)。添加了允许的回调 URL:https://<MY_APP>.azurewebsites.net/.auth/login/auth0/callback 在应用服务上启用了身份验证。添加了 OpenID Connect 身份提供程序。指定的元数据 URL:https://<MY_AUTH0_DOMAIN>/.well-known/openid-configuration(URL 在浏览器中工作)。从 Auth0 页面复制了客户端 ID 和客户端密码。

其他信息:

Auth0 的日志包含两个条目:成功登录和成功交换:“访问令牌的授权码” 登录页面后,重定向调用未到达我的 node.js 代码(在调试器中检查)。

【问题讨论】:

【参考方案1】:

请检查您的原因是否属于少数已知案例:

    尝试重新启动您的网络应用并检查是否有任何不同。

    根据 Node.js best practices and troubleshooting- Azure App Service | Microsoft Docs

如果您的应用程序在启动时返回 500 错误,则 可能有几个原因:

    Node.exe 不在正确的位置。检查 nodeProcessCommandLine 设置。 主脚本文件不在正确的位置。检查 web.config 并确保主脚本文件的名称在 handlers 部分与主脚本文件匹配。

也可能是由于 nuget 包不兼容。

    应用服务有一个设置WEBSITE_AUTH_RUNTIME_VERSION。这可能是一个可能的原因: 尝试修改应用服务的运行时版本。见.net - Azure App Service - Stack Overflow .然后重新启动该过程。

对于 Linux 应用,添加一个名为 WEBSITE_WEBDEPLOY_USE_SCM 的应用设置并在您的应用中将其设置为 true:Reference

在某些不需要的情况下,移除 docker 连接器将解决与空引用异常相关的问题。

参考资料:

    node.js - similar type of error - Stack Overflow

    Azure Functions and App Service Authentication with Auth0 and other OpenID Connect providers (anthonychu.ca)

如果问题仍然存在,您可以提出支持请求:从 azure 应用服务门户的概述页面 > 支持 + 故障排除 > 新的支持请求。

【讨论】:

1.我试了几次。 2. 如果那里有问题,我建议该应用程序在没有身份验证的情况下也无法运行,但确实如此。 3.我试试,顺便说一下是个Linux应用。同时,我使用 express 和 passport 在 node.js 应用程序中编写了身份验证,并且工作正常。

以上是关于使用 Auth0 的 Azure 应用服务 OpenID 身份验证失败:值不能为空。 (参数'rawToken')的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions 应用程序 + Auth0 提供程序,使用身份验证令牌调用 API 时出现 401

auth0 是不是支持使用 Microsoft Authenticator App 登录 Azure AD?

使用 Cordova 的 Azure 移动应用自定义身份验证

如何部署 Nestjs 应用程序(在 Azure 上)?

错误:使用 Next.js 应用程序部署到 Azure 时出现“需要域选项”

Microsoft Teams 应用程序的 Auth0 登录