Microsoft Graphのドキュメントでこのシナリオを見つけようとしましたが、見つけられませんでした。アプリケーションのアクセス許可を使用して受信トレイにアクセスしますか?
C#コンソールアプリケーションで.Net用のMicrosoft Graph Clientを使用しようとしています。アプリケーションは、ユーザーがサインインしなくても受信トレイを開き、メールを処理できるように電子メールをダウンロードする必要があります。
私は最初にアプリケーション認証でMSALを試しましたが、トークンを返すことはできませんでした。だから、私はOAuthとADALを試してみました。私はトークンを得て、グラフにアクセスしているようです。
しかし、私はアプリケーションとしてログインしています。したがって、ユーザーはなく、したがって受信トレイもありません。ユーザーのメールボックスを検索しようとしましたが、認証エラーが発生します。これは、受信ボックスの資格情報を入力する場所がないため、私には意味があります。
デーモンアプリをメールボックスにアクセスさせる方法を知っている人はいますか?
メールの下でpermissions scopes documentationに行くと、アクセス許可はDelegate
になります。つまり、コンソールアプリケーションはメールボックスにアクセスできません。または、Delegate
を使用してメールボックスにログインできますか?ログインポップアップボックスはありませんか?
私はAPPLICATIONID、メールボックス名([email protected]
のようなもの)、およびADのユーザーの間でも混乱しています考えて
ここに私のコードです(例:myuser_IT
。):
class AuthenticationHelper : IAuthenticationProvider
{
public async Task AuthenticateRequestAsync(HttpRequestMessage request)
{
string clientId = "xxxxx-xxxxx-xxxxx";
string clientSecret = "yyYYyyYY"; //this is a secret.
try
{
AuthenticationContext authContext =
new AuthenticationContext("https://login.windows.net/mytenant.onmicrosoft.com/oauth2/token");
ClientCredential creds = new ClientCredential(clientId, clientSecret);
AuthenticationResult authResult =
await authContext.AcquireTokenAsync("https://graph.microsoft.com/", creds);
request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
public class InboxProcessor
{
public async Task DownloadEmails(string inbox)
{
try
{
IMailFolderMessagesCollectionPage inboxMessages = null;
GraphServiceClient graphClient =
new GraphServiceClient(new AuthenticationHelper());
User myUser = await graphClient
.Users[inbox]
.Request()
.GetAsync(); //this give a permission error
// This is the example in all the examples.
// I'm not figuring out how to get to the correct users and how it know which Inbox.
// there's no way to log in as my user?
inboxMessages = await graphClient
.Users
.Request()
.Me
.MailFolders
.Inbox
.Messages
.Request()
.Top(20)
.GetAsync(); //this gives an error, I think because there's no ME
}
catch
{
//do some error handling
}
}
}
マーク、ありがとうございました。あなたのコメントをこの記事や他の投稿に読んだら、ついに思いつきました:inboxMessages = graphClient.Users [userPrincipalName] .MailFolders.Inbox.Messages.Request()。GetAsync();を待ちます。これは機能しています。たぶん私はusers.Read.Allアクセス許可のスコープを持っていないと特定のユーザーにのみ?私は.Top(20)を追加しようとしています。それ以外の場合は多すぎるかもしれません。ありがとうございました。ありがとうございました。 – Laurie996
また、私は今気づいています...デリゲート権限をスクロールしてアプリケーション権限を表示する必要があります。ありがとうございました! – Laurie996
これは認証を行う良い方法だと思いますか?そこにはたくさんの異なる例があるようです。私はシンプルなのが好きで、これは私にはやさしいようでした。 – Laurie996