| title | Windows UWP App in C# Tutorial | ||||||
|---|---|---|---|---|---|---|---|
| name | Windows UWP (C#) | ||||||
| hybrid | false | ||||||
| alias |
|
||||||
| language |
|
||||||
| image | /media/platforms/windows-8.png | ||||||
| tags |
|
||||||
| snippets |
|
This tutorial explains how to integrate Auth0 login with a Windows UWP (Universal Windows Platform) C# application. The Nuget package Auth0.Windows.UWP helps you authenticate users with any Auth0 supported identity provider.
Use the NuGet Package Manager Console (Tools -> Nuget Package Manager -> Package Manager Console) to install the Auth0.Windows.UWP package, running the command:
${snippet(meta.snippets.dependencies)}
Go to the Application Settings section in the Auth0 dashboard and make sure that Allowed Callback URLs contains the following value:
https://${account.namespace}/mobileThere are three options to do the integration:
- Using the Auth0 Login Widget with the Web Authentication Broker (this is the simplest with only a few lines of code required).
- Using the Auth0 Login Widget with the Web Authentication Broker, but specifying a specific Connection.
- Custom user interface to ask username and password.
To start with, we'd recommend using the Login Widget. Here is a snippet of code to copy & paste on your project.
Since we are using await (.NET 4.5 or greater), your method needs to be async:
${snippet(meta.snippets.setup)}
${snippet(meta.snippets.use)}
If you know which identity provider you want to use, you can add a connection parameter and the user will be sent straight to the specified connection:
var user = await auth0.LoginAsync("auth0waadtests.onmicrosoft.com") // connection name hereconnection names can be found on Auth0 dashboard. E.g.:
somegoogleapps.com,saml-protocol-connection, etc.
The third option is to create your own custom user interface to prompt the user for their username and password. You can then pass this, along with the connection name to the LoginAsync method:
var user = await auth0.LoginAsync(
"my-db-connection", // connection name here
"username",
"password");Optionally you can specify the scope parameter. There are various possible values for scope:
- scope: "openid" (default) - It will return, not only the
access_token, but also anid_tokenwhich is a Json Web Token (JWT). The JWT will only contain the user id. - scope: "openid {attr1} {attr2} {attrN}" - If you want only specific user's attributes to be part of the
id_token(For example:__scope: "openid name email picture").
You can get more information about this in the Scopes documentation.
In some cases Auth0 may not be able to connect to an identity provider. Showing nothing more than a "Can't connect to the service" message. A reason for this may be that the identity provider endpoint resolves to an Intranet (that has an authenticated domain controller), home or work network. In this case it is required to enable the "Private Networks (Client & Server)" capability.
Use the Package Manifest (Solution Explorer > Package.appxmanifest) to enable the capability within the "Capabilities" tab.
The Auth0User has the following properties:
Profile: returns aNewtonsoft.Json.Linq.JObjectobject (from Json.NET component) containing all available user attributes (e.g.:user.Profile["email"].ToString()).IdToken: is a Json Web Token (JWT) containing all of the user attributes and it is signed with your client secret. This is useful to call your APIs and flow the user identity.Auth0AccessToken: theaccess_tokenthat can be used to access Auth0's API. You would use this for example to link user accounts.
Congratulations!
