Kirk Evans Blog

.NET From a Markup Perspective

Join a SUSE Linux Enterprise Server to an Azure AD Domain Services Managed Domain

This post will show how to use Azure AD Domain Services (AAD-DS) with SUSE Linux Enterprise Server (SLES). Background A customer asked how they might use AAD-DS with SLES 11 SP4 to test their product.  I am very familiar with Windows but still very much a Linux novice, and there seems to be no easy… Read more

Creating a Node.js Application Secured by Azure AD

This post shows how to create a Node.js application using Node.js, Bash for Windows, Visual Studio Code, and Azure Active Directory.  The final solution is available at https://github.com/kaevans/node-aad.  Background I’ve been a C# .NET developer for the past 17 years  Sure, I’ve coded with other languages (C++, Java, JavaScript, Pascal, F#, Visual Basic, Ruby), but… Read more

Securely Upload to Azure Storage with Angular

This post will show you how to securely upload blob content to Azure Storage from an Angular app.  The source code for this solution is available at https://github.com/kaevans/globalscaledemo.  Background Our team has been busy the past few months traveling the globe and hosting readiness workshops for our top global system integrator partners.  One of the… Read more

Configure a Point-to-Site VPN Connection to an Azure VNet

This post shows how to create a point-to-site (P2S) VPN connection to an Azure virtual network (VNet).  Background In my previous post, I showed how to create a virtual network configuration XML file and to create several environments (dev, stage, and prod) that are each deployed into a separate subnet.  It’s kind of a goofy… Read more

Azure AD Application Proxy and SharePoint 2013

This post will show how to configure Azure Active Directory Application Proxy for an on-premises SharePoint 2013 installation using Kerberos constrained delegation. Background I see this question in emails and online forums alike almost weekly: “We need users to access our on-premises SharePoint farm from their mobile phones.” This usually involves an in-depth conversation about… Read more

A Sample SharePoint App That Calls A Custom Web API

This post will show how to create a Web API that calls other services on behalf of the current user. Background This post is part of a series on building a SharePoint app that communicate with services protected by Azure AD. Part 1 – An Architecture for SharePoint Apps That Call Other Services Part 2… Read more

Call O365 Exchange Online API from a SharePoint App

This post will show how to call an O365 Exchange Online API from a SharePoint provider-hosted app.  The code for this post is available at https://github.com/kaevans/spapp-exchange.  Background This post is part of a series on building a SharePoint app that communicate with services protected by Azure AD. Part 1 – An Architecture for SharePoint Apps… Read more

Using OpenID Connect with SharePoint Apps

This post will show how to authenticate a user using OpenID Connect in a SharePoint provider hosted app without prompting the user for additional credentials.  Background This post is part of a series on building a SharePoint app that communicate with services protected by Azure AD. Part 1 – An Architecture for SharePoint Apps That… Read more

An Architecture for SharePoint Apps That Call Other Services

This post will show an architecture for a SharePoint provider hosted app that calls other services such as the O365 API for Exchange, Azure AD Graph API, PowerBI API, or a custom Web API. Background This post is part of a series on building a SharePoint app that communicate with services protected by Azure AD…. Read more

Install a New Active Directory forest on an Azure Virtual Network

This post will show how to install a new Active Directory forest on an Azure Virtual Network.  We will use this domain controller and virtual network in subsequent posts. DISCLAIMER: This post does not contain definitive guidance on the correct way to create a domain controller in Azure.  For more definitive guidance, please see TechNet… Read more