2016-06-23 24 views
2

Wir planen, Windows 10 UWP-Anwendung zu implementieren. Wir möchten Benutzer beim Zugriff auf in Cloud gehostete API-Services authentifizieren.Authentifizierung in UWP-Anwendung

Zuvor haben wir das NuGet-Paket Microsoft.IdentityModel.Clients.ActiveDirectory zur Authentifizierung in Windows Store 8.1 verwendet. Wie authentifizieren wir Benutzer in Windows UWP-Anwendungen? Ich denke, AAD-Code für Windows Store und Windows Phone ist anders, wie können wir die AAD-Bibliothek für Windows 10 UWP-Anwendungen nutzen. Ich habe von Token Broker Authentication Architecture gehört. Funktioniert das für Azure Active Directory neben Facebook usw.?

Bitte lassen Sie mich wissen, wenn es eine Umgehung für AAD-Bibliothek in Phone und Store (d. H. Universal App) gibt.

Antwort

1

Wenn Sie eine native App haben, die auf eine API in Azure zugreifen und sich mit oAuth authentifizieren möchten, müssen Sie den OAuth 2.0-Autorisierungscode verwenden, wie unter https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-protocols-oauth-code/ beschrieben.

Dies erfordert, dass Sie sowohl Ihre native App und API im Azure-Verzeichnis.

In https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-devquickstarts-windowsstore/ wird ein Beispiel für eine UWP App gegeben, die auf die graph.microsoft.com API zugreift, aber Sie können diese durch Ihre eigene API ersetzen.

Sander,

Wenn diese beantwortet Ihre Frage bitte Tag so ist, so dass wir anderen helfen können.

+0

meine UWP App funktioniert nicht mit AAD, ich kann mich mit Browser und Endpunkt wie folgt anmelden [link] (https://contoso.azurewebsites.net/.auth/login/aad/callback), aber wenn ich versuche, mich anzumelden UWP App verwenden, ich habe Ressource kann nicht gefunden werden Fehler nach dem Bring aufgefordert, ein Fenster und nachdem ich meine E-Mail-Adresse eingeben und drücken Sie die Eingabetaste. Bedeutet das, dass ich meine native App nicht auch in Azure AD eingerichtet habe? und ich habe nur den Azure Mobile App-Endpunkt eingerichtet? – yanglinfang1226

0

Lassen Sie mich die Schritte erklären. Sie können immer noch Active Directory Authentication Library in den UWP Apps verwenden.

Um es zu tun müssen Sie NuGet-Paket hinzufügen (Ich habe den obigen Link eingefügt). Sobald Sie es dort zu tun gibt nur wenige Schritte Authentifizierung in Ihrer Anwendung zu implementieren:

1) Speichern von Informationen zur Authentifizierung benötigt (zum Beispiel im App.xaml.cs Konstruktor):

var localSettings = ApplicationData.Current.LocalSettings; 
localSettings.Values["ida:AADInstance"] = "https://login.windows.net/{0}"; 
localSettings.Values["ida:Tenant"] = "<<Name of your tenant here>>"; 
localSettings.Values["ida:ClientId"] = "<<Client ID Here>>"; 
localSettings.Values["ida:RedirectUri"] = "<<Redirect URI here>>"; 
localSettings.Values["ApiBaseAddress"] = "<<ID of Api Resource here>>"; 
localSettings.Values["ServiceAddress"] = "<<Address of your Api here>>"; 

Nun ist die schreiben Code zur Authentifizierung (dies ist Helper-Klasse):

class ADContextHelper 
{ 
    ApplicationDataContainer _localSettings; 
    AuthenticationContext _authContext; 
    string _aadInstance; 
    string _tenant; 
    string _clientId; 
    Uri _redirectUri; 
    string _authority; 
    string _apiResourceId; 
    string _apiBaseAddress; 

    public ADContext() 
    { 
     _localSettings = ApplicationData.Current.LocalSettings; 
     configureSettings(); 
     _authContext = new AuthenticationContext(_authority); 
    } 

    private void configureSettings() 
    { 
     _aadInstance = _localSettings.Values["ida:AADInstance"].ToString(); 
     _tenant = _localSettings.Values["ida:Tenant"].ToString(); 
     _clientId = _localSettings.Values["ida:ClientId"].ToString(); 
     _redirectUri = new Uri(_localSettings.Values["ida:RedirectUri"].ToString()); 
     _authority = String.Format(_aadInstance, _tenant); 
     _apiResourceId = _localSettings.Values["ApiResourceId"].ToString(); 
     _apiBaseAddress = _localSettings.Values["ApiBaseAddress"].ToString(); 
    } 

    public async Task<string> Authenticate() 
    { 
     AuthenticationResult authResult = await _authContext.AcquireTokenAsync(_apiResourceId, _clientId, _redirectUri); 
     //Here you retrieve the token: 
     var token = authResult.AccessToken; 
     return token; 
    } 
} 

Am Ende habe ich auch Code für Abmeldung enthalten - vielleicht wollen Sie es schließen:

public async Task<bool> Logout() 
    { 
    string requestUrl = "https://login.microsoftonline.com/" + _tenant + "/oauth2/logout?post_logout_redirect_uri=" + _redirectUri; 
    var client = new HttpClient(); 
    var request = new HttpRequestMessage(HttpMethod.Get, requestUrl); 
    var response = await client.SendAsync(request); 
    } 

Ich hoffe, das wird Ihnen helfen.