{"id":560,"date":"2022-10-11T15:16:08","date_gmt":"2022-10-11T06:16:08","guid":{"rendered":"https:\/\/sumomo.ohwaki.jp\/wordpress\/?p=560"},"modified":"2023-01-05T09:12:03","modified_gmt":"2023-01-05T00:12:03","slug":"azure-identitymailkit%e3%81%a7oauth-pop3","status":"publish","type":"post","link":"https:\/\/sumomo.ohwaki.jp\/wordpress\/?p=560","title":{"rendered":"Azure.Identity+MailKit\u3067OAuth2 POP3"},"content":{"rendered":"\n<p>Microsoft\u306f\u3001SMTP\u3084POP3,IMAP\u306e\u57fa\u672c\u8a8d\u8a3c\u30d7\u30ed\u30c8\u30b3\u30eb\u3067\u306e\u30a2\u30af\u30bb\u30b9\u8a31\u53ef\u30929\u670830\u65e5\u3088\u308a\u30b5\u30a4\u30c8\u6bce\u306b\u9806\u6b21\u505c\u6b62\u3057\u3066\u3044\u304f\u4e88\u5b9a\u3060\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u57fa\u672c\u8a8d\u8a3c\u3092\u4f7f\u7528\u3057\u3066POP3\u3084IMAP\u306a\u3069\u3067\u30e1\u30fc\u30eb\u3092\u53d7\u4fe1\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u52d5\u4f5c\u3057\u306a\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u9ad8\u304f\u306a\u308b\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u306f\u79c1\u3082\u627f\u77e5\u3057\u3066\u3044\u3066\u3001MailKit\u306eSaslMechanismOAuth2\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066OAuth2\u5bfe\u5fdc\u306b\u3059\u308b\u3088\u3046\u4fee\u6b63\u3057\u3066\u3044\u305f\u306e\u3060\u304c\u3001\u305d\u306e\u969b\u306b\u4f7f\u7528\u3057\u305f<s>Microsoft.Identity.Client<\/s>Microsoft.Graph.Auth\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u4ee5\u524d\u66f8\u3044\u305f\u3088\u3046\u306b\u3001\u975e\u63a8\u5968\u3068\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3067\u3001Azure.Identity\u306b\u5909\u66f4\u3057\u3066\u307f\u305f\u3002<\/p>\n\n\n\n<p>\u57fa\u672c\u306fMicrosoft Graph\u3092\u4f7f\u3046\u5834\u5408\u3068\u540c\u3058\u306a\u306e\u3060\u304c\u3001\u6ce8\u610f\u70b9\u3068\u3057\u3066\u3001\u30e6\u30fc\u30b6\u30fc\u3084\u30b0\u30eb\u30fc\u30d7\u3092\u635c\u67fb\u3059\u308bMS Graph\u3067\u306f\u30b9\u30b3\u30fc\u30d7\u306ePrefix\u304c\u5fc5\u8981\u3067\u306f\u7121\u304b\u3063\u305f\u306e\u3060\u304c\u3001POP3\u3084IMAP,SMTP\u7b49\u3067\u306f\u3001&#8221;https:\/\/outlook.office365.com\/&#8221;\u306ePrefix(\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306a\u306e\u304b\u306a?)\u304c\u5fc5\u8981\u3068\u306a\u308b\u4e8b\u3002<\/p>\n\n\n\n<p>POP3\u306e\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30fc\u30c9\u3068\u306a\u308b\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-csharp\" data-file=\"OAuth2\u3092\u4f7f\u7528\u3057\u305fPOP3\" data-lang=\"C#\"><code>\u30fb\u30fb\u30fb\nusing MimeKit;\nusing MailKit;\nusing MailKit.Net.Pop3;\nusing MailKit.Security;\nusing MimeKit.Text;\n\nusing Azure.Core;\nusing Azure.Identity;\n\u30fb\u30fb\u30fb\n\/\/ \u3053\u306e\u4f8b\u3067\u306f\u3001Resource Owner Password Credentials\u30d5\u30ed\u30fc\u3092\u4f7f\u7528\n\n\/\/ \u30b9\u30b3\u30fc\u30d7\nstring[] scopes = new string[] { &quot;https:\/\/outlook.office365.com\/POP.AccessAsUser.All&quot; };\n\nvar options = new TokenCredentialOptions\n{\n    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud\n};\n\n\/\/ \u30e6\u30fc\u30b6\u30fc\u540d,\u30d1\u30b9\u30ef\u30fc\u30c9,\u30c6\u30ca\u30f3\u30c8ID,\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3ID(Client ID)\u304b\u3089\u8cc7\u683c\u60c5\u5831\u3092\u5f97\u308b\nvar cred = new UsernamePasswordCredential(PopUser,PopPass,Authority,AppID,options); \n\n\/\/ \u30b9\u30b3\u30fc\u30d7\u3092\u6307\u5b9a\u3057\u3066Access Token\u306e\u53d6\u5f97\nvar req = new TokenRequestContext(scopes);\nvar token = await cred.GetTokenAsync(req);\n\n\/\/ \u30e6\u30fc\u30b6\u30fc\u540d\u3068Access Token\u3092\u4f7f\u7528\u3057\u3066OAuth2\u7528\u306e\u8a8d\u8a3c\u6a5f\u69cb\u3092\u4f5c\u6210\nvar oauth2 = new SaslMechanismOAuth2(PopUser, token.Token);\n\nusing (Pop3Client cli = new Pop3Client())\n{\n    await cli.ConnectAsync(&quot;outlook.office365.com&quot;, 995, SecureSocketOptions.SslOnConnect);\n    \/\/ OAuth2\u3067\u8a8d\u8a3c\n    await cli.AuthenticateAsync(oauth2);\n\t\u30fb\u30fb\u30fb<\/code><\/pre><\/div>\n\n\n\n<p>\u6700\u521d\u3001Authentication Fail\u304c\u767a\u751f\u3057\u305f\u306e\u3067\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u5909\u3048\u305f\u308a\u3001\u8272\u3005\u3057\u3066\u307f\u305f\u304c\u3001\u5168\u7136\u3060\u3081\u306a\u306e\u3067\u3001\u3082\u3057\u3084\u3068\u601d\u3044\u3001\u30b9\u30b3\u30fc\u30d7\u306bPrefix\u3092\u4ed8\u3051\u305f\u3089\u3001\u3046\u307e\u304f\u52d5\u4f5c\u3057\u305f\u3002<\/p>\n\n\n\n<p>OAuth2\u5bfe\u5fdc\u306b\u3064\u3044\u3066\u306f\u30cd\u30c3\u30c8\u3067\u8abf\u3079\u3066\u3082\u3001Microsoft.Identity.Client\u3092\u4f7f\u7528\u3057\u305f\u4f8b\u3070\u304b\u308a\u3067\u3001\u89e3\u6c7a\u306b\u7d50\u69cb\u6642\u9593\u304c\u639b\u304b\u3063\u3066\u3057\u307e\u3063\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microsoft\u306f\u3001SMTP\u3084POP3,IMAP\u306e\u57fa\u672c\u8a8d\u8a3c\u30d7\u30ed\u30c8\u30b3\u30eb\u3067\u306e\u30a2\u30af\u30bb &hellip; <a href=\"https:\/\/sumomo.ohwaki.jp\/wordpress\/?p=560\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,9,15,4],"tags":[],"class_list":["post-560","post","type-post","status-publish","format-standard","hentry","category-net","category-c","category-oauth2","category-4"],"_links":{"self":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=560"}],"version-history":[{"count":8,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/560\/revisions"}],"predecessor-version":[{"id":606,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/560\/revisions\/606"}],"wp:attachment":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}