2016-06-23 28 views
2

Windows 10 UWPアプリケーションを実装する予定です。クラウドでホストされているAPIサービスにアクセスしながら、ユーザーを認証したいと考えています。UWPアプリケーションでの認証

以前は、Windowsストア8.1での認証にNuGetパッケージMicrosoft.IdentityModel.Clients.ActiveDirectoryを使用しました。 Windows UWPアプリケーションでユーザーを認証するにはどうすればよいですか?私は、Windows StoreとWindows PhoneのAADコードが異なると思います.Windows 10 UWPアプリケーションのために、どのようにAADライブラリを活用できますか? Token Broker Authentication Architectureについて聞いたことがあります。これは、Facebookなどに加え、Azure Active Directoryでも機能しますか?

AADライブラリが電話とストア(つまりユニバーサルアプリ)の両方で動作するようにするには、回避策がある場合は教えてください。

答えて

1

AzureでAPIにアクセスしてoAuthで認証するネイティブアプリがある場合は、https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-protocols-oauth-code/の「OAuth 2.0認証コードフロー」を使用する必要があります。

これには、Azureディレクトリのネイティブアプリとapiの両方が必要です。

https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-devquickstarts-windowsstore/では、graph.microsoft.com APIにアクセスするUWP Appのサンプルが提供されていますが、これは独自のAPIで置き換えることができます。

サンダー、

これは、あなたの質問に答える場合はタグ付けしてください、我々は他の人を助けることができるようなものです。

+0

私のUWPアプリはAADで動作しませんので、この[リンク](https://contoso.azurewebsites.net/.auth/login/aad/callback)のようにブラウザとエンドポイントを使用してサインインできますが、サインインしようとするとUWPアプリを使用して、私はリソースを取得することができませんエラーが表示された後、ウィンドウを入力した後、私は自分の電子メールアドレスを入力してヒットを入力します。 Azure ADでもネイティブアプリをセットアップしていないのですか? Azure Mobile Appエンドポイントだけをセットアップしましたか? – yanglinfang1226

0

手順を説明します。 UWPアプリではまだActive Directory Authentication Library を使用できます。

NuGetパッケージを追加する必要があります(上記のリンクを貼り付けました)。あなたがそれを行うたら、あなたのアプリに認証を実装するには、いくつかのステップがあります:App.xaml.csコンストラクタでインスタンスの認証()のために必要な

1)店舗情報:

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

は今書きます

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); 
    } 
:多分あなたはそれを含めることになるでしょう - 私もログアウトするためのコードを含む終わり

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

:認証用のコードは、(これはヘルパークラスです)

これがあなたに役立つことを願っています。

関連する問題