使用 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 移动应用自定义身份验证