我们计划实施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库在电话和商店(即通用应用程序)中都有解决方法,请告诉我。
答案 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);
}
我希望这会对你有所帮助。