如何在控制台应用程序中使用OAuth2和Mailkit机制实现Office365的服务到服务身份验证?

blpfk2vs  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(198)

这里我想在控制台应用程序中使用Office365,Oauth2阅读电子邮件。
I am Getting Authentication Failed错误

此处Account在检索authToken后变为NULL。

下面是我的App注册

我用PublicClientApplicationBuilder和confidentialClientApplication两种方式编写代码

下面是使用PublicClientApplicationBuilder

的代码
下面的代码使用ConfidentialClientApplicationBuilder - Microsoft。图形范围
这里我尝试了 www.example.com 。

我还尝试了ConfidentialClientApplicationBuilder - Outlook Office365 Scope

string[] scopesCon = new string[] {  "https://outlook.office365.com/.default"};

请让我知道我错过了什么,使工作-验证邮箱阅读邮件
更新说明-此代码成功工作I Passed mail server作为用户名从我们正在阅读电子邮件。SaslMechanismOAuth2(authToken.Account.UserName,AccessToken)

20jt8wwn

20jt8wwn1#

您可以使用下面的Microsoft Graph API查询来读取特定用户的邮件。

GET https://graph.microsoft.com/v1.0/users/username@xxxxxxxxxx.onmicrosoft.com/mailFolders/inbox/messages

我注册了一个Azure AD应用程序,添加了API权限,如下所示:

现在,我通过Postman使用客户端凭证流生成了一个访问令牌,参数如下:

POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
client_id:<appID>
grant_type:client_credentials
client_secret:<secret>
scope: https://graph.microsoft.com/.default

答复:

当我使用上面的访问令牌运行Graph API查询时,我在response中成功获得了邮件列表,如下所示:

GET https://graph.microsoft.com/v1.0/users/username@xxxxxxxxxx.onmicrosoft.com/mailFolders/inbox/messages
Authorization: Bearer <token>

答复:

要在c#中运行相同的Microsoft Graph查询,可以使用以下示例代码:

using Azure.Identity;
using Microsoft.Graph;

namespace GraphApp
{
    class MSGraph
    {
        static async Task Main(string[] args)
        {
            var scopes = new[] { "https://graph.microsoft.com/.default" };
            var tenantId = "tenantID";
            var clientId = "appID";
            var clientSecret = "secret";
            var options = new TokenCredentialOptions
            {
                AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
            };
            var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret, options);
            var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
            var inbox = await graphClient.Users["userID"].MailFolders["Inbox"].Messages.GetAsync();
        }
    }
}

参考:Build .NET apps with Microsoft Graph

相关问题