Code Sample: OAuth 2.0 Certificate Authentication
Updated: June 19, 2015
Applies To: Azure
This sample illustrates how to authenticate to Microsoft Azure Active Directory Access Control (also known as Access Control Service or ACS) using the OAuth 2.0 protocol by presenting a SAML token signed by an X.509 certificate. This certificate corresponds to a ServiceIdentity configured on ACS, and ACS issues a SWT with a nameidentifier claim of the ServiceIdentity. This SWT is used to authenticate to an OAuth 2.0 protected resource. This sample conforms to draft 13 of the OAuth 2.0 protocol. The code for this sample is located in the OAuth2 (C#\OAuth2) subdirectory of the Microsoft Azure Active Directory Access Control (ACS) Code Samples package.
Prerequisites
To run this sample, you will need:
An account in the Azure portal and an Access Control namespace.
Visual Studio 2010 (any version)
For more details, see ACS Prerequisites (https://go.microsoft.com/fwlink/?LinkId=221065).
Configuring the Sample
The ACS configuration required for this sample can be performed using either the ACS Management Portal or the ACS Management Service. This topic describes both options.
Option 1: Configuring the Sample Using the ACS Management Portal
Option 2: Configuring the Sample Using the ACS Management Service
Option 1: Configuring the Sample Using the ACS Management Portal
To configure the sample using the ACS Management Portal
Go to the Microsoft Azure Management Portal (https://manage.WindowsAzure.com), sign in, and then click Active Directory. (Troubleshooting tip: "Active Directory" item is missing or not available)
To create an Access Control namespace, click New, click App Services, click Access Control, and then click Quick Create. (Or, click Access Control Namespaces before clicking New.)
To manage an Access Control namespace, select the namespace, and then click Manage. (Or, click Access Control Namespaces, select the namespace, and then click Manage.)
This action opens the Access Control Service management portal.
To register your application with ACS, click Relying party applications, click Add, and then type the following information in the form:
In the Name field, enter OAuth2 RP
In the Realm field, enter https://oauth2relyingparty/
In the Token format field, select SWT
Click Generate to create a new key
In the Expiration Date field, enter an appropriate expiration date for the key. The key will no longer be valid on this date.
Click Save.
With your relying party registered, it is now time to create the rules that determine the claims that ACS will issue to your application. In this sample, we will create a rule that grants any claim generated by ACS to pass through.
To create this rule, click Rule Groups, and then click Default Rule Group for OAuth2 RP. Use the following settings to add a new rule:
In the Claim issuer section, select Access Control Service
In the Input claim type section, select Any
In the Input claim value section, select Any
In the Output claim type section, select Pass through input claim type
In the Output claim value section, select Pass through input claim value
This sample relies on credentials managed by ACS.
To configure a new client certificate for the client application, click Service Identities, click Add, and then type a name. Add a Credential Type of X.509 Certificate and browse for the ACS2ClientCertificate.cer file in the Certificates folder of this sample. Click Save.
Now that ACS is configured, open Visual Studio.
Option 2: Configuring the Sample Using the ACS Management Service
The Visual Studio sample solution has a console application called ConfigureSample that uses the ACS Management Service and the common helpers defined in the Common class library. This application can be used to configure your Access Control namespace for use with this sample.
To configure the sample using the ACS Management Service
Update the Common class library with information about your Access Control namespace. Open SamplesConfiguration.cs and enter the following:
ServiceNamespace - This is the name of your Access Control namespace
ManagementServiceIdentityName - This is a management service account’s name
ManagementServiceIdentityKey - This is the password associated with the management service account
AcsHostUrl - This is the host name of ACS
Run the ConfigureSample application in Visual Studio. This will configure ACS to run this sample.
When the ConfigureSample application completes, it will output the generated relying party signing key to the console. Copy this key to the clipboard.
Running the Sample
To run the sample
Open the sample in Visual Studio. In addition to ConfigureSample and Common, the solution consists of two projects: ProtectedResourceWebApp and Client.
If you have not already done so, enter your Access Control namespace details in Common\SamplesConfiguration.cs. For more information, see step 1 of Option 2: Configuring via the ACS Management Service above. This file is also used by the Client project.
Open the web.config file in the ProtectedResourceWebApp project.
Enter your token signing key in the appropriate AppSettings elements. If you used the Management Service to configure ACS, this is the value that you copied to the clipboard. To obtain the token signing key, in the ACS portal, click Certificates and Keys. Below is a code snippet that show this section of the web.config file:
<appSettings> <add key="SigningKey" value="...Copy Signing Key..."/> </appSettings>
To run the sample, start the ProtectedResourceWebApp. A web browser appears, but the text box is empty because the web browser is unauthenticated.
Run Client. HTML will be displayed in a console window. Note that the HTML indicates that the user is authenticated and displays the claims from ACS.