AzureFunctions.Authentication.FrontEndAuthProvider.TryAuthenticateRequest C# (CSharp) Method

TryAuthenticateRequest() public method

public TryAuthenticateRequest ( System.Web.HttpContextBase context ) : bool
context System.Web.HttpContextBase
return bool
        public bool TryAuthenticateRequest(HttpContextBase context)
        {
            IPrincipal principal = null;
            var request = context.Request;
            var displayName = request.Headers[Constants.FrontEndDisplayNameHeader];
            var principalName = request.Headers[Constants.FrontEndPrincipalNameHeader];
            var portalToken = request.Headers[Constants.PortalTokenHeader];

            if (string.Equals(principalName, Constants.AnonymousUserName, StringComparison.OrdinalIgnoreCase))
            {
                if (request.UrlReferrer?.AbsoluteUri.StartsWith(Constants.PortalReferrer, StringComparison.OrdinalIgnoreCase) == true ||
                    request.UrlReferrer?.AbsoluteUri.StartsWith(Constants.MsPortalReferrer, StringComparison.OrdinalIgnoreCase) == true ||
                    request.UrlReferrer?.AbsoluteUri.StartsWith(Constants.RcPortalReferrer, StringComparison.OrdinalIgnoreCase) == true)
                {
                    principal = new AzureFunctionsPrincipal(new AzureFunctionsIdentity(Constants.PortalAnonymousUser));
                }
                else if (string.IsNullOrEmpty(portalToken))
                {
                    principal = new AzureFunctionsPrincipal(new AzureFunctionsIdentity(Constants.AnonymousUserName));
                }
                else
                {
                    principal = ParsePortalToken(portalToken);
                }
            }
            else if (!string.IsNullOrWhiteSpace(principalName) ||
                     !string.IsNullOrWhiteSpace(displayName))
            {
                principal = new AzureFunctionsPrincipal(new AzureFunctionsIdentity(principalName ?? displayName));
            }
            else
            {
                // throw?
                principal = new AzureFunctionsPrincipal(new AzureFunctionsIdentity(Constants.AnonymousUserName));
            }

            context.User = principal;
            Thread.CurrentPrincipal = principal;

            return (principal.Identity as AzureFunctionsIdentity)?.IsAuthenticated == true;
        }

Usage Example

        public void ParseJwtWithInternationalCharacters(string email, string firstName, string lastName)
        {
            var jwt = GetJwtString(email, firstName, lastName);

            var context = Substitute.For<HttpContextBase>();
            var request = Substitute.For<HttpRequestBase>();

            var headers = new NameValueCollection();
            headers.Add(Constants.FrontEndDisplayNameHeader, string.Empty);
            headers.Add(Constants.FrontEndPrincipalNameHeader, Constants.AnonymousUserName);
            headers.Add(Constants.PortalTokenHeader, jwt);

            request.Headers.Returns(headers);
            request.UrlReferrer.Returns(new Uri("http://example.com"));
            context.Request.Returns(request);

            var frontEndAuth = new FrontEndAuthProvider();
            Assert.True(frontEndAuth.TryAuthenticateRequest(context), $"Assert TryAuthenticate is successful. {email}, {firstName}, {lastName}");
            Assert.NotNull(context.User);
            Assert.True(context.User is AzureFunctionsPrincipal);
            var user = context.User as AzureFunctionsPrincipal;
            Assert.True(user.Identity is AzureFunctionsIdentity);
            var identity = user.Identity as AzureFunctionsIdentity;
            Assert.Equal(email, identity.Name);
        }