First look: Windows Server Technical Preview 2 and ADFS vNext

Tonight I finally got around to installing the recently released Windows Server Technical Preview 2, which was published around the time of the annual BuildConf in the US.

So I ran up a Hyper-V image and hit the standard product selection screen.  I was greeted, as it has been rumoured, with two options – Server (no tools, i.e. core) or Server (with Admin tools).  This is suspiciously different to Windows Server 2012 R2 in that there’s no Server plus Graphical User Interface option.

I elect for the Admin tools, and continue.

Install Options

The usual copying of files, it doesn’t take too long to get up and running.  I suspect the OS is fairly lean in terms of disk consumption, given how fast the install took.  First thing in and it’s off to set the Administrator password.

Fast copy Set Password

Authenticated, and up comes the familiar Server Manager.  It used to annoy me that Server Manager would launch by default, but given the reality of no GUI, it’s my last bastion short of PowerShell scripting everything.

Look, no GUI!

So the first thing I do is change the Computer name, this is easily done via the old faithful System applet – however I need to also configure the Ethernet since my Lab setup (when using DHCP) doesn’t include my domain DNS as primary (i.e. I can’t join the domain right away).  Configuring networking got console-like:

consoleconsole console

So I also decided to change add the VM to the domain as well using the console tools.  It was actually very simple.  I’m going to wonder why I ever needed a GUI..

After a quick(ish) reboot, we’re back – except now I’ll authenticate using my Domain credentials instead.

checkpoint

Before I do anything further, I take a checkpoint in case I bork anything up; and then resume to do some role-based installs.

Installing Roles – ADFS vNext

Since I’ve been working with Active Directory Federation Services (ADFS) lately, I’m curious if this preview contains any advances, so..

Installing ADFS

So I jump into an MMC console and add the Certificates snap-in, selecting Local Computer.  From here I request a new certificate from my local CA:

Grant Certificate

imageimage

The options haven’t changed much, I elect to have a new service account created for me and off we go.. Behold, we have success:

imageimage

Examining the next version of ADFS – Version 4?

The “current” version (shipping with Server 2012 R2), according to binary/product version is 6.3:
Microsoft.IdentityServer.Service, Version=6.3.0.0,

The version shipped with Windows Server Preview 2 is version 10:
Microsoft.IdentityServer.Service, Version=10.0.0.0

Officially, the version which ships with Windows Server 2012 R2 is AD FS 3.0, so I’m not sure if this next version should be v4.0 or not.

The first interesting thing – no Internet Information Services requirement.  The second… check out the differences between the current ADFS and the one in the Technical Preview 2:

image
AD FS 3.0 (Windows Server 2012 R2) vs.

image
AD FS ?.0 (Windows Server vNext)

Clearly there are some big changes ahead.  Hopefully, it’ll be the introduction of OpenID Connect and full OAuth2 authorization flow support….  So I clicked on the “What’s new in AD FS?” link, but alas, fail:

image

Moving along we come to – scopes – and look at the juicy options, which includes OpenID Connect:

image

Plus, AD FS now can issue certificates for User Logon and VPN access:

image

Finally, some new endpoints to play with.  Notice OAuth2 is enabled by default:

image

We now also have a separate window for managing clients, which gives us most of what we need for proper OAuth2 – see my previous article about Identity Server.

image

The wrap-up

Well, that’s enough for one article.  I’ll start playing with ADFS (v4.0?) and see whether it can do everything I think it can do.  In the meantime, I’m going to install the next version of Internet Information Services 10 (IIS) and see what’s changed there, too.

image

Until next time.

image


Review: Urban Armor Gear Outland (iPhone 4S)

Given the serious investment we place in our modern smartphones, it makes a whole lot of sense to also spare a thought for how we protect these pocket sized technical innovations.  A busy demanding modern lifestyle can put your mobile device at significant risk of accidental damage in a myriad of ways.

For this reason, it’s worth shopping around when considering how you’ll protect your phone.  Enter Urban Armor Gear (UAG).  This company makes some seriously detailed cases, and today we’ll be reviewing the Outland model for the Apple iPhone 4S.

UAGUAG - Packaging

Unboxing

For a modest price you get some well thought out options, out of the box there’s instructions, a cleaning cloth with a screen protector and the case itself obviously.  The packaging is also well designed, you can see what the case looks like quite clearly, front and back.

Urban Armor Gear - Contents

It takes no time at all to slip your iPhone into the protective embrace of the UAG’s armor shell, which despite appearances manages to blend durability with a softness so that the case is protective but also nice to hold in your hand.

Installation

Installing the protective film

The first step is to apply the screen protector to the front of the iPhone.  Here, UAG have provided small adhesive panels on both sides of the protector so that you may easily separate and apply to the iPhone using the supplied utility to remove air bubbles as you go.  The protector is viscous enough to survive repeat attempts if you don’t manage to align it perfectly the first time.

Assembled Striking design

Once you’ve applied the screen protector – which does not inhibit the iPhone’s touch screen in the slightest – slipping the case around the phone is reasonably easy.  It’s a snug fit, so don’t expect that the phone will be easily released.

Features

The big drawcard is clearly the eye catching design of the case.  The case simply screams ‘tough’, but is actually comfortable to hold.  One big drawcard for my mind is that the case provides plenty of space around the camera, so there’s no interference or glare when taking photos or video.

Urban Armor Gear Outland

Our “walkabout test” provided the following feedback:

  • Eye catching design, decent selection of colour options to choose from
  • Unique moulding on the back of the case provides excellent grip
  • Buttons on the side are more user friendly, easier to use the buttons than other cases
  • Nice touch to include a screen protector out of the box
  • Case is relatively slim, doesn’t unnecessarily add bulk to the phone’s profile
  • Charging/USB cable port is easy to access

Profile

If you’re in the market for something to protect your smartphone, it’s worth taking a closer look at Urban Armor Gear’s line up.  They have cases to suit most models of modern handsets. 

Order online – free shipping worldwide (at time of writing) Site: http://www.urbanarmorgear.com


Identity Server – An Introduction

Introduction

In recent times, I’ve become very intimately acquainted with OpenID Connect, OAuth2 as well as SAML, JWT, WS-Federation and more.  It’s a complicated world.

Since I dwell amongst the Microsoft ecosystem, I’m very experienced with Active Directory Federation Services (AD FS) which in its latest version supports OAuth2 endpoints as well as the more traditional (and dated) SAML 2.0 and WS-Federation protocols.

AD FS 3.0’s OAuth2 implementation is fairly limited, to be polite.  As modern applications such as Single Page Applications (SPA), WebAPI services and mobile applications advance, security capabilities must scale accordingly.  To augment AD FS there are two additional options – .NET DotNetOpenAuth and Thinktecture IdentityServer of which the current version is Identity Server 3.

Identity Server 3 (ID3) is the platform we’ve selected recently to help expand ADFS authentication capabilities, and the basis for this article.  ID3 already has very decent documentation, but I’ll need to borrow some of it to help frame the introduction in this article.

The following diagram neatly illustrates the role that ID3 plays between users, clients and applications/resources:

OpenID Connect
Source: http://identityserver.github.io/Documentation/docs/overview/terminology.html

The next few headings help to define the roles involved in applying security principles using ID3 and identity providers.  I’ve referenced a limited scope here as in my next article I’m going to paint a scenario and document an interesting solution I designed recently to solve a tricky problem involving ID3 and scope access.

The text below in italics comes direct from the Identity Server documentation.

Identity Server Concepts

OpenID Connect Provider (OP)

IdentityServer is an OpenID Connect provider – it implements the OpenID Connect protocol (and OAuth2 as well).  Different literature uses different terms for the same role – you probably also find security token service, identity provider, authorization server, IP-STS and more.

But they are in a nutshell all the same: a piece of software that issues security tokens to clients.IdentityServer has a number of jobs and features – including:

- authenticate users using a local account store or via an external identity provider
-
provide session management and single sign-on
-
manage and authenticate clients
-
issue identity and access tokens to clients
-
validate tokens

User

A user is a human that is using a registered client to access his or her data

Client

A client is a piece of software that requests tokens from IdentityServer – either for authenticating a user or for accessing a resource (also often called a relying party or RP). A client must be registered with the OP.Examples for clients are web applications, native mobile or desktop applications, SPAs, server processes etc.

Scope

Scopes are identifiers for resources that a client wants to access. This identifier is sent to the OP during an authentication or token request.

Resource scopes

Resource scopes identify web APIs (also called resource servers) – you could have e.g. a scope named calendar that represents your calendar API.

Access Token

An access token can be validated by a resource.  Clients request access tokens and forward them to an API. Access tokens contain information about the client and the user (if present). APIs use that information to authorize access to their data.

OAuth Concepts

Right, now that we’ve got that cleared up we can take a quick browse through some OAuth2 concepts..  First off here’s a link to the OAuth2 Specification in case you want to read the whole enchilada.  The text below in italics is directly from the OAuth2 specification itself.

What I’m going to be focusing on are Authorization Grants.  First, let’s take a look at how this is all intended to flow:

image
Figure 1 (my edition)

The abstract OAuth 2.0 flow illustrated in Figure 1 describes the interaction between the four roles and includes the following steps:

(A)  The client requests authorization from the resource owner.  The authorization request can be made directly to the resource owner (as shown), or preferably indirectly via the authorization server as an intermediary.

(B)  The client receives an authorization grant, which is a credential representing the resource owner’s authorization, expressed using one of four grant types defined in this specification or using an extension grant type.  The authorization grant type depends on the method used by the client to request authorization and the types supported by the authorization server.

(C)  The client requests an access token by authenticating with the authorization server and presenting the authorization grant.

(D)  The authorization server authenticates the client and validates the authorization grant, and if valid, issues an access token.

1.3.  Authorization Grant

An authorization grant is a credential representing the resource owner’s authorization (to access its protected resources) used by the client to obtain an access token.  This specification defines four grant types –
- authorization code,
- implicit,
- resource owner password credentials, and,
- client credentials
as well as an extensibility mechanism for defining additional types.

1.3.1.  Authorization Code

The authorization code is obtained by using an authorization server as an intermediary between the client and resource owner.  Instead of requesting authorization directly from the resource owner, the client directs the resource owner to an authorization server (via its user-agent as defined in [RFC2616]), which in turn directs the resource owner back to the client with the authorization code.

Before directing the resource owner back to the client with the authorization code, the authorization server authenticates the resource owner and obtains authorization.  Because the resource owner only authenticates with the authorization server, the resource owner’s credentials are never shared with the client.

The authorization code provides a few important security benefits, such as the ability to authenticate the client, as well as the transmission of the access token directly to the client without passing it through the resource owner’s user-agent and potentially exposing it to others, including the resource owner.

1.3.2.  Implicit

The implicit grant is a simplified authorization code flow optimized for clients implemented in a browser using a scripting language such as JavaScript.  In the implicit flow, instead of issuing the client an authorization code, the client is issued an access token directly (as the result of the resource owner authorization).  The grant type is implicit, as no intermediate credentials (such as an authorization code) are issued (and later used to obtain an access token).

When issuing an access token during the implicit grant flow, the authorization server does not authenticate the client.  In some cases, the client identity can be verified via the redirection URI used to deliver the access token to the client.  The access token may be exposed to the resource owner or other applications with access to the resource owner’s user-agent.

Implicit grants improve the responsiveness and efficiency of some clients (such as a client implemented as an in-browser application), since it reduces the number of round trips required to obtain an access token.  However, this convenience should be weighed against the security implications of using implicit grants, such as those described in Sections 10.3 and 10.16, especially when the authorization code grant type is available.

1.3.3.  Resource Owner Password Credentials

The resource owner password credentials (i.e., username and password) can be used directly as an authorization grant to obtain an access token.  The credentials should only be used when there is a high degree of trust between the resource owner and the client (e.g., the client is part of the device operating system or a highly privileged application), and when other authorization grant types are not available (such as an authorization code).

Even though this grant type requires direct client access to the resource owner credentials, the resource owner credentials are used for a single request and are exchanged for an access token.  This grant type can eliminate the need for the client to store the resource owner credentials for future use, by exchanging the credentials with a long-lived access token or refresh token.

1.3.4.  Client Credentials

The client credentials (or other forms of client authentication) can be used as an authorization grant when the authorization scope is limited to the protected resources under the control of the client, or to protected resources previously arranged with the authorization server.  Client credentials are used as an authorization grant typically when the client is acting on its own behalf (the client is also the resource owner) or is requesting access to protected resources based on an authorization previously arranged with the authorization server.

Summary

Hopefully what I’ve presented here makes sense.  I realise that most of the text is a boilerplate lift directly from source, but it’s important to understand the key concepts and terminology before we get stuck into working with identity providers, scopes and clients.

The next article will build upon the info introduced in this article – and hopefully will provide food for thought as you navigate the tricky waters of identity management and security concepts.