2016-07-29 8 views
1

私はクライアントが私との予定を作ることができる(C#)Webアプリケーションを構築しようとしています。 私は、WebアプリがOutlookカレンダーに項目を読み込んで追加できるようにしたいと思います。 多くのユーザーがウェブアプリを使用しますが、ウェブアプリは1つのOutlookカレンダーにのみアクセスします。 私が働くことができたすべての例では、対話的に認証するWebアプリケーションユーザーが関わっていますが、ユーザーは自分のパスワードを知らないでしょう。 ウェブアプリでユーザー名/メールアドレスとパスワードをハードコードしたいと思います。ハードコードのユーザー名とパスワードでOffice Outlook APIを使用する

私はエラーを取得するトークンを取得しようとしている:

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException: 
AADSTS65001: The user or administrator has not consented to use the application. 
Send an interactive authorization request for this user and resource. 

私はテナントの管理者がいないですが。管理者の介入なしにこれを動作させる方法はありますか? ユーザーの資格情報としてユーザー名とパスワードではなく、何らかの証明書を使用しますか?以下のように(現在は簡単なC#のコンソールアプリケーションで)

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

UserCredential uc = new UserCredential(MyUsername, MyPassword); 
var AuthContext = new AuthenticationContext("https://login.windows.net/Common"); 

// this doesn't work unless an unexpired token already exists 
ar = AuthContext.AcquireToken("https://outlook.office365.com/", MyClientId, uc); 

// this does work, but requires the app user to know the password 
ar = AuthContext.AcquireToken("https://outlook.office365.com/", MyClientId, new Uri(MyReturnURI)); 

答えて

2

直接トークンを要求するためにユーザ名とパスワードを使用可能にするために、我々は、アプリを使用するために同意する必要があります。

OAuth 2.0認証コード許可フローを使用して、ユーザーの同意を得ることができます。我々はアプリを承諾した後、今、私たちがトークンを取得するためにあなたのポスト内のコードを使用することができ、

static string authority= "https://login.microsoftonline.com/common"; 
public static string GetDeligateToken(string resource, string clientId,string redirectURL) 
    { 
     AuthenticationContext authContext = new AuthenticationContext(authority); 
     AuthenticationResult authResult= authContext.AcquireTokenAsync(resource, clientId,new Uri(redirectURL), new PlatformParameters(PromptBehavior.Auto)).Result; 
     return authResult.AccessToken; 
    } 

:ここではサンプルは、デリゲートトークンを取得する(3.13.1.846)ADAL認証ライブラリを使用しています。

+0

申し訳ありませんがわかりません。あなたが提供したコードを使用すると、サインインするために私をWebページに送ります(そして、私が自分のユーザー名とパスワードを提供するとトークンを返します)。しかし、そのコードはいつ実行され、誰によって実行されるのでしょうか?実装しようとしているWebアプリケーションは、ユーザー名とパスワードを知らない他のユーザーによって使用されます。あなたが前もって提供したコードを実行し、トークンを取得し、それを私のWebアプリケーションの文字列としてハードコードしたいのですか?これらのトークンは1時間ほど後に失効すると思いましたか? – Wayne

+0

ポストでコードを実行した後、元の投稿で使用するアカウントのページにログインします。その後、同意ページが表示され、アクセストークンが取得された後、元の投稿の問題は修正されます(既に**アプリケーションの使用に同意した**)。 –

+0

ありがとう、それはうまくいくようです。だからこの同意は永遠に続くのですか? – Wayne

関連する問題