将 OpenIdConnect 与 AzureFunctions 结合使用

2023-12-28

我使用 azure 函数来托管 React 应用程序的 API,但我也使用相同的 azure 函数来托管应用程序的 html/js/css(通过 Blob 存储上的静态文件的代理函数)。

我一直在使用 EasyAuth 为其提供身份验证,效果非常好,但是我需要支持未内置于 EasyAuth 中的身份提供程序(并且它根本不支持自定义身份提供程序)。这意味着我将重新使用 Microsoft.AspNetCore.Authentication.OpenIdConnect 包。

我已在启动文件中注册了身份验证

 builder.Services
            .AddAuthentication()
            .AddCookie("WebJobsAuthLevel") //errors without this, although I suspect it's wrong
            .AddCookie("Bearer") //errors without this, although I suspect it's wrong
            .AddOpenIdConnect("custom", o =>
            {
                o.MetadataAddress = "https://localhost:44320/.well-known/openid-configuration";
                o.ClientId = "clientid";
                o.ClientSecret = "secret";
                o.ResponseMode = OpenIdConnectResponseType.Code;
                o.SignInScheme = "Cookies";
                o.GetClaimsFromUserInfoEndpoint = true;
             });

以及一个可以让我触发挑战的功能

    [FunctionName("CustomAuth")]
    public async Task<IActionResult?> Challenge([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = ".auth/login/custom")]HttpRequest req, ILogger log)
    {
        return new ChallengeResult("custom");
    }

如果我点击此功能,它会很好地工作,重定向到身份验证提供程序进行登录。

但是,一旦我登录,它就会重定向回我的功能应用程序,其中 404

http://localhost:7071/signin-oidc?querystringhere http://localhost:7071/signin-oidc?querystringhere

在这个阶段,我猜测 AddAuthentication 无法像在 ASP.NET MVC 核心中使用它时那样挂钩传入的 Web 请求。想知道是否有一种已知的方法可以将其连接起来,无论是在较低级别还是通过自定义天蓝色函数


  • 添加对 Microsoft.Azure.WebJobs.Script.WebHost 的引用
  • 使用相对较新的 IJobHostHttpMiddleware 接口创建 AzureFunctions 中间件
  • 将此中间件注册为服务
    
    public class AzureFunctionsAuthenticationMiddleware : IJobHostHttpMiddleware
    {
        private IAuthenticationSchemeProvider _schemeProvider;

        public AzureFunctionsAuthenticationMiddleware(IAuthenticationSchemeProvider schemeProvider)
        {
            _schemeProvider = schemeProvider;
        }

        public Task Invoke(HttpContext context, RequestDelegate next)
        {
            return new AuthenticationMiddleware(next, _schemeProvider).Invoke(context);
        }
    }

  public void Configure(IWebJobsBuilder builder)
        {
            builder.Services.AddHttpContextAccessor();


            builder.Services.AddSingleton();

            builder.Services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            })
            .AddArmToken()
            .AddScriptAuthLevel()
            .AddScriptJwtBearer()
            .AddCookie()
            .AddOpenIdConnect("custom", o =>
            {
                o.AuthenticationMethod = OpenIdConnectRedirectBehavior.RedirectGet;
                o.SignInScheme = "Cookies";

                o.MetadataAddress = "metadata address";
                o.ClientId = "clientid";
                o.ClientSecret = "secret";
                o.ResponseMode = "query";
                o.ResponseType = "code";
            });

这解决了signin-oidc 404,我现在遇到了另一个关于无效openid消息的问题,我不确定它是否相关(例如,我认为我的openidconnect服务器不正确,而不是我的客户端)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 OpenIdConnect 与 AzureFunctions 结合使用 的相关文章

随机推荐

  • 为什么java hashCode()中经常使用XOR,而其他按位运算符却很少使用?

    我经常看到这样的代码 int hashCode return a b Why XOR 在所有位操作中 XOR 具有最好的位混洗属性 这个真值表解释了原因 A B AND 0 0 0 0 1 0 1 0 0 1 1 1 A B OR 0 0
  • Jackson - 结合 @JsonValue 和 @JsonSerialize

    我正在尝试组合 JsonValue and JsonSerialize 让我们从我当前的容器类开始 public class Container private final Map
  • javafx 移植应用程序性能不佳

    我刚刚使用 gradlew 将一个名为 PuzzlePieces 的示例 netbeans javafx 项目移植到 android 中 该应用程序的性能如此糟糕 是什么原因造成的 我的设备 LG E975 4 4 kitkat This
  • 无法转换类型的对象

    在我的 wpf 应用程序中尝试将字符串从一个窗口发送到另一个窗口时出现错误 无法将 WpfApplication4 LoginWindow 类型的对象强制转换为 WpfApplication4 MainWindow 类型 在我的登录窗口中
  • 如何在 jersey 2.0 中使用 hk2 注入常量?

    如何在球衣中使用 HK2 将常量注入某个类 有了Guice 我可以上一些像这样的课程 public class DependsOnFoo Inject public DependsOnFoo Named FOO String foo 我会在
  • python 中基于 websocket 的 MQTT

    python 是否支持通过端口 8080 订阅 mqtt 代理 import sys import paho mqtt client as mqtt def on connect mqttc obj flags rc print rc st
  • 访问图中重复访问次数最少的所有节点

    我有一个基于图块的地图 其中几个图块是墙壁 其他图块是可步行的 可步行的瓷砖构成了我想在路径规划中使用的图表 我的问题是他们有什么好的算法可以找到访问图中每个节点的路径 从而最大限度地减少重复访问吗 例如 地图示例http img220 i
  • app:srcCompat 不适用于 ImageView

    我正在向库项目添加矢量可绘制支持 并使用app srcCompat引用可绘制的矢量 唯一有效的视图是 ImageButton 我不知道为什么 这是我的 build gradle 的相关部分 android defaultConfig vec
  • 从另一台具有不同 Gradle 版本的 PC 导入 Android Studio 项目?

    我有一个用 Android Studio 版本 1 3 2 编写的 Android studio 项目 现在 在另一台装有 Android Studio 2 1 2 的 PC 上 我想导入或打开该项目 但是当我尝试打开时 我的 Gradle
  • 发送 XMLHttpRequest 时缓存结果出现问题?

    我对 AJAX 和缓存的想法很陌生 On the AJAX 向服务器发送请求 http www w3schools com ajax ajax xmlhttprequest send asp来自 W3Schools 它说你应该添加 t Ma
  • 为什么不允许 movl 从内存到内存?

    我想知道集会中是否允许这样做 movl edx eax 我猜它会访问第一个操作数中的内存并放入 第二个操作数的内存 例如 a b 但我还没有看到任何处理此类问题的示例 所以我猜这是不允许的 另外 我被告知这是不允许的 leal esi ed
  • 什么是 Git 修剪?

    我不小心修剪了一些远程分支 我真的不知道这样做的后果是什么 我单击了 Git 扩展中的 修剪远程分支 按钮 认为它会删除远程分支 官方文档说 git prune 从对象数据库中删除所有无法访问的对象 我实在不明白这是什么意思 我猜这可能会删
  • 需要帮助使用 Perl 修复此正则表达式代码吗?

    我需要您的专业帮助来使用 perl 修复此正则表达式代码 我有这个数据文件 Data SCSI test A ccccccccccccccccc aaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbb Data SCSI t
  • 如何在 python 代码中利用 locals() ?

    我在阅读时偶然发现了以下警告像 Pythonista 一样编码 惯用的 Python http python net goodger projects pycon 2007 idiomatic handout html作者 大卫 古杰 文章
  • 如何使用 on_delete 属性在用户模型的外键字段中设置用户全名?

    我在 django 中有一个模型 它具有带有用户模型的外键 class News models Model user models ForeignKey AUTH USER MODEL on delete models SET messag
  • 内容和 div 之间的边距溢出滚动条

    我使用以下代码来保持菜单项固定 同时允许内容滚动 因为它似乎是所有浏览器中最稳定的方法 body overflow hidden div content height 100 overflow auto 我的问题很简单 但我似乎无法弄清楚
  • Mongodb聚合框架|对多个值进行分组?

    我想使用 mongoDB 的聚合框架来运行 SQL 中的内容 看起来有点像 SELECT SUM A B C from myTable GROUP BY B C 文档指出 您可以指定管道中文档中的单个字段 先前计算的值或由多个传入字段组成的
  • 在 Azure Web App 上打开其他端口

    我最近将 NET Web API 2 应用程序从 Azure 云服务迁移到 Azure Web 应用程序 但是 我们有一个遗留应用程序需要与端口 8080 和 444 上的 API 进行通信 有没有办法在网络应用程序上打开额外的端口 你不能
  • django 1.9 和注册/login.html

    我正在开发 django 1 9 项目 在 Django 1 7 7 中 登录功能可以正常工作 但现在我一直有 registration login html Template Does Not Exist 模板 login html lo
  • 将 OpenIdConnect 与 AzureFunctions 结合使用

    我使用 azure 函数来托管 React 应用程序的 API 但我也使用相同的 azure 函数来托管应用程序的 html js css 通过 Blob 存储上的静态文件的代理函数 我一直在使用 EasyAuth 为其提供身份验证 效果非