-
Notifications
You must be signed in to change notification settings - Fork 10
Description
We have been using Darkloop and FunctionAuthorize for a long time. A few days back this just stopped working totally when we are deploying new versions of our code (no changes to Darkloop or auth), and the azure functions are dead upon deployment. Fortunately we have these in slot so prod was not affected.
The function app keys are also totally dead.
Removing Darkloop nuget package its possible to get the Azure function running again, but of course the authorization is gone.
Reporting this to Microsoft first since we was rather clear something had changed in Azure. Microsoft admits this but blames the way Darkloop is implemented.
We are using f# for Azure functions and have this code:
namespace AzureFunctions.Startup
open ServiceSetup
open AzureFunctionsDependencyInjectionExtensions.Config
open Microsoft.Azure.Functions.Extensions.DependencyInjection
open Microsoft.Extensions.DependencyInjection
open Microsoft.AspNetCore.Authentication.JwtBearer
open System
open Microsoft.AspNetCore.Authentication
open Microsoft.Extensions.Configuration
[<System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage>]
module DependencyInjectionStartup =
let setupAuthenticationScheme (options: AuthenticationOptions) =
options.DefaultAuthenticateScheme <- JwtBearerDefaults.AuthenticationScheme
options.DefaultChallengeScheme <- JwtBearerDefaults.AuthenticationScheme
let setupJwtAuthorization authority audience (options: JwtBearerOptions) =
options.Authority <- authority
options.Audience <- audience
type HealthCheckSetupFunctionStartup() =
inherit FunctionsStartup()
override this.Configure(builder: IFunctionsHostBuilder) : unit =
let services = builder.Services
let sp = services.BuildServiceProvider()
let conf = sp.GetService<IConfiguration>()
let authIssuer = conf["Authorization:Issuer"]
let authAudience = conf["Authorization:Audience"]
let setupJwtAuth = setupJwtAuthorization authIssuer authAudience
// For some reason, authentication setup needs to be called here
// there is some problem with doing it withing AddDependencyInjection
// reason unknown, needs further investigation
builder.Services
.AddFunctionsAuthentication(Action<AuthenticationOptions>(setupAuthenticationScheme))
.AddJwtBearer(Action<JwtBearerOptions>(setupJwtAuth), true)
|> ignore
builder.Services.AddFunctionsAuthorization() |> ignore
builder.AddDependencyInjection(fun s -> s |> setupServices conf) |> ignore
[<assembly: FunctionsStartup(typeof<HealthCheckSetupFunctionStartup>)>]
do ()
See also caveats from Microsoft related to auth*:
I do suspect we might have some bad code after all, and any pointers for helping out would be highly appreciated.
Thanks in advance.