【问题标题】: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 代码(在调试器中检查)。

【问题讨论】:

    标签: azure openid-connect auth0 azure-appservice azure-authentication


    【解决方案1】:

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

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

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

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

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

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

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

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

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

    参考资料:

    1. node.js - similar type of error - Stack Overflow

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

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

    【讨论】:

    • 1.我试了几次。 2. 如果那里有问题,我建议该应用程序在没有身份验证的情况下也无法运行,但确实如此。 3.我试试,顺便说一下是个Linux应用。同时,我使用 express 和 passport 在 node.js 应用程序中编写了身份验证,并且工作正常。
    猜你喜欢
    • 2017-08-28
    • 2019-06-22
    • 2023-04-10
    • 2021-01-02
    • 2010-09-28
    • 2016-07-08
    • 1970-01-01
    • 2019-02-27
    • 2018-11-03
    相关资源
    最近更新 更多