2016-05-22 14 views
0

私はOffice 365からメールボックスでExchange Onlineを持っており、Managed EWSを使用するコンソールC#アプリケーションでこのメールボックスにアクセスする必要があります。要件は、コンソールアプリケーションがOAuth認証を使用してExchange Onlineにアクセスする必要があることです。Azure AD:ネイティブアプリケーションを認証する際のuser_interaction_required問題

Azure ADをセットアップしてそこにアプリケーションを作成し、clientidとredirect uriを受信しました。私はトークンを発行するために、.NETのためのActive Directoryの認証ライブラリ(NuGetから最新バージョン)を使用してい

enter image description here

、しかし:下のスクリーンショットを見てください - 私は、アプリケーションへの完全なアクセス許可を与えていますそれは動作させるには問題を抱えて...

私のコードは次のとおりです。

AuthenticationContext authenticationContext = new AuthenticationContext("https://login.windows.net/rsoftgroup.onmicrosoft.com", false); 
AuthenticationResult authenticationResult = null; 

try 
{ 
    var authenticationTask = authenticationContext.AcquireTokenAsync(
     "outlook.office365.com", 
     "c4fa7d60-df1e-4664-a8f8-fb072d0bb287", 
     new Uri(redirectUri), 
     new PlatformParameters(PromptBehavior.Never) 
    ); 

    authenticationTask.Wait(); 
    authenticationResult = authenticationTask.Result; 
    exchangeService.Credentials = new OAuthCredentials(authenticationResult.AccessToken); 
} 
catch (AdalException) 
{ 
    // Exception occured on the authentication process. 
} 

私はメッセージでAdalExceptionを取得: "はuser_interaction_required:2つの条件のいずれかが発生しました:1。 PromptBehavior.Neverフラグが渡されましたが、ユーザー対話が必要なため、制約を適用できませんでした。 2.エラーが十分に短い時間枠」で完了することからHTTP認証の流れを妨げサイレントWeb認証中に発生した

は、誰かがそれを解決するためにどのように私を助けることはできますか?

を私は仕事にOAuth認証を必要とします任意の提案が高く評価ユーザーとの対話なしに、これはコマンドラインアプリケーションになりますよう...

+1

EWSの代わりにOutlook REST APIを使用できる場合は、https://dev.outlook.com/restapi/tutorial/dotnetを参照して、OAuth付きの開始コードサンプルを入手してくださいOffice 365メールボックスにアクセスします。 –

答えて

1

アプリケーションはまだあなたがあなたのコードを見て現在の場合は認証しませんが、一部のユーザーとして認証する必要がありますPromptBehavior.Neverのために

認証を行う標準コンソールアプリケーション(たとえば、アプリケーションの実行時に資格情報を要求する)では、私は帯域外を使用しますコールのurn:IETF:WG:OAuthの:2.0:OOB(あなたがしてリダイレクトエンドポイントを必要としない)、あなたはコンソールアプリのWindowsを実行してADALライブラリが処理する場合には例えば

AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/Common"); 

var authenticationTask = ac.AcquireTokenAsync(
"https://graph.windows.net", 
"5471030d-f311-4c5d-91ef-74ca885463a7", 
new Uri("urn:ietf:wg:oauth:2.0:oob"), 
new PlatformParameters(PromptBehavior.Always) 
).Result; 

Console.WriteLine(authenticationTask.AccessToken); 

を促すあなたのコードを設定します配管と正しい認証プロンプトを表示してトークンを取得すると、コード内で(またはパラメータなどで)資格情報の入力を求めるプロンプトに対して攻撃面を減らすというメリットが得られます

EWSを使用する必要がない場合(例えば、既存のコードベースの投資などがない場合)、RESTエンドポイントを使用する方がよいでしょう。このタイプのデーモンタイプアプリケーション認証フロー例https://blogs.msdn.microsoft.com/exchangedev/2015/01/21/building-daemon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow/

+0

グレン、お返事ありがとうございます。あなたは素晴らしい :-)。すべてが今私には明らかです!また、http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/で提供されるリンクは、ヘッドレス認証で非常に役立ちました。私は、ADALプロンプトを表示するかどうか、または完全にヘッドレスなソリューション(同時に安全性が低い)を望むかどうかについて、クライアントと話し合います。 – msporek

関連する問題