Using JSON Web Tokens (JWT) with Azure Functions (WITHOUT using Active Directory)

后端 未结 5 1899
渐次进展
渐次进展 2021-01-31 21:04

I am sure someone out there has already done this, but I have yet to find any documentation with regard to the Microsoft implementation of JWT. The official documentation from

5条回答
  •  佛祖请我去吃肉
    2021-01-31 21:06

    Any and all information would really help those of us (me) understand how to use JWT with Azure (anonymous) functions in order to build a "secure" REST API.

    Per my understanding, you could use the related library in your azure function code to generate / validate the JWT token. Here are some tutorials, you could refer to them:

    Create and Consume JWT Tokens in C#.

    Jwt.Net, a JWT (JSON Web Token) implementation for .NET

    JWT Authentication for Asp.Net Web Api

    Moreover, you could leverage App Service Authentication / Authorization to configure the function app level Authentication / Authorization. You could go to your Function App Settings, click "NETWORKING > Authentication / Authorization" under the Platform features tab. Enable App Service Authentication and choose Allow Anonymous requests (no action) as follows:

    You could create a HttpTrigger function with anonymous accessing for user logging and return the JWT token if the user exists. For the protected REST APIs, you could follow the code sample below:

    if(System.Security.Claims.ClaimsPrincipal.Current.Identity.IsAuthenticated)
    {
       //TODO: retrieve the username claim
       return req.CreateResponse(HttpStatusCode.OK,(System.Security.Claims.ClaimsPrincipal.Current.Identity as ClaimsIdentity).Claims.Select(c => new { key = c.Type, value = c.Value }),"application/json");
    }
    else
    {
        return req.CreateResponse(HttpStatusCode.Unauthorized,"Access Denied!"); 
    }
    

    For generating the JWT token used in App Service Authentication, you could follow How to: Use custom authentication for your application and the code under custom API controller CustomAuthController from adrian hall's book about Custom Authentication to create the JWT token.

    UPDATE:

    For the custom authentication approach under App Service Authentication, I just want op to leverage the authentication / Authorization provided by EasyAuth. I have did some test for this approach and found it could work on my side. Op could send the username and password to the HttpTrigger for authentication, then the HttpTrigger backend need to validate the user info, and use Microsoft.Azure.Mobile.Server.Login package for issuing App Service Authentication token to the client, then the client could retrieve the token from the AuthenticationToken property. The subsequent requests against the protected APIs could look like as follows:

    https://.azurewebsites.net/api/
    Header: x-zumo-auth:
    

    NOTE:

    For this approach, the related HttpTrigger functions need to allow anonymous accessing and the App Service Authentication also needs to choose Allow Anonymous requests (no action). Otherwise, the App Service Authentication and function level authentication would both validate the request. For the protected APIs, op needs to manually add the System.Security.Claims.ClaimsPrincipal.Current.Identity.IsAuthenticated checking.

提交回复
热议问题