UWP应用程序中的身份验证

时间:2016-06-23 13:19:32

标签: azure uwp

我们计划实施Windows 10 UWP应用程序。我们希望在访问Cloud中托管的API服务时对用户进行身份验证。

以前,我们使用Microsoft.IdentityModel.Clients.ActiveDirectory NuGet包在Windows应用商店8.1中进行身份验证。我们如何在Windows UWP应用程序中验证用户?我认为Windows Store和Windows Phone的AAD代码不同,我们如何利用AAD库来实现Windows 10 UWP应用程序。我听说过Token Broker Authentication Architecture。除了Facebook之外,这还适用于Azure Active Directory吗?

如果AAD库在电话和商店(即通用应用程序)中都有解决方法,请告诉我。

2 个答案:

答案 0 :(得分:1)

如果您有一个想要在Azure上访问API并使用oAuth进行身份验证的本机应用程序,则需要使用" OAuth 2.0授权代码流程"正如https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-protocols-oauth-code/所述。

这要求您在Azure目录中使用本机应用程序和api。

https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-devquickstarts-windowsstore/中,我们提供了一个访问graph.microsoft.com API的UWP应用程序示例,但您可以使用自己的API替换它。

桑德

如果这回答了您的问题,请标记,以便我们可以帮助其他人。

答案 1 :(得分:0)

让我解释一下这些步骤。 你仍然可以使用Active Directory Authentication Library 在UWP应用程序中。

要做到这一点,你必须添加NuGet包(我粘贴上面的链接)。完成后,在您的应用中实施身份验证的步骤很少:

1)存储身份验证所需的信息(例如在App.xaml.cs构造函数中):

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>>";

现在编写验证代码(这是辅助类):

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;
    }
}

最后我还包括退出代码 - 也许你想要包含它:

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);
    }

我希望这会对你有所帮助。