dark-loop / functions-authorize

An ASP.NET Core based authentication and authorization middleware for HTTP triggered Azure Functions (In-Proc and Isolated)
Apache License 2.0
34 stars 3 forks source link

OpenId connect authorization_code #46

Open nearlyheadlessarvie opened 2 months ago

nearlyheadlessarvie commented 2 months ago

This is more of a question than an issue:

Is it possible to complete an openid connect authorization_code flow? I tried it but getting 404 in /signin-oidc.

artmasa commented 2 months ago

Hi @nearlyheadlessarvie, If you want to execute authentication flows, I think you will need to create your own Authentication middleware replicating ASPNET Cores one, but using the Azure Functions middleware interface. All ASP.NET interfaces you see in ASPNET middleware should be already registered in your services when you called AddAuthentication(...).AddOpenIdConnect(...) so it should be pretty straight forward.

Can you show your setup?

I think is a great idea to add this functionality to this package.

artmasa commented 2 months ago

Also, something to consider is that in the Isolated model, there are 2 processes, Host and your functions. The host process relays request to your functions process using GRPC. If the function URL does not exist on the host it will never make it to your functions process. You will have to fake the remote authentication URLs (/signin-oidc, etc...) as http triggered functions, even when they will never be hit as the authentication middleware is the one handling those requests.

artmasa commented 2 months ago

@nearlyheadlessarvie, here is a quick implementation for remote authentication using a middleware. I'm looking into dynamically adding support for remote authentication callbacks based on the options and add the related functions methods

nearlyheadlessarvie commented 2 months ago

At the moment there's no real need to hook on any events so it's very basic image

Btw, its like the moment you read my question there's this idea you had and executed it real quick... and it worked!

You just forgot the await

var handler = handlers.GetHandlerAsync(httpContext, scheme.Name) as IAuthenticationRequestHandler;