gpt4 book ai didi

azure-functions - 将 OpenIdConnect 与 AzureFunctions 结合使用

转载 作者:行者123 更新时间:2023-12-02 02:49:32 28 4
gpt4 key购买 nike

我使用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

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

最佳答案

  • 添加对 Microsoft.Azure.WebJobs.Script.WebHost 的引用
  • 使用相对较新的 IJobHostHttpMiddleware 接口(interface)创建 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服务器不正确,而不是我的客户端)

关于azure-functions - 将 OpenIdConnect 与 AzureFunctions 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57404968/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com