(例外が発生しました):MSALアカウントにExchangeベースの電子メールシステムがあるかどうかはどのように判断する必要がありますか?私はMSALで働いていると、次のエラーを受信したユーザ持っ
{
"error":{
"code":"ResourceNotFound",
"message":"Resource could not be discovered.",
"innerError":{
"request-id":"99b44a33-e5cd-4b69-9730-32d72e1f4ebf",
"date":"2016-12-11T03:51:37"
}
}
}
をコードは、デフォルトMSALのデモコードです:
public async Task<ActionResult> ReadMail()
{
try
{
string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
ConfidentialClientApplication cca = new ConfidentialClientApplication(clientId, null,
new ClientCredential(appKey), new MSALSessionCache(signedInUserID, this.HttpContext));
string[] scopes = { "Mail.Read" };
AuthenticationResult result = await cca.AcquireTokenSilentAsync(scopes);
HttpClient hc = new HttpClient();
hc.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", result.Token);
HttpResponseMessage hrm = await hc.GetAsync("https://graph.microsoft.com/v1.0/me/messages");
string rez = await hrm.Content.ReadAsStringAsync();
ViewBag.Message = rez;
return View();
}
catch (MsalSilentTokenAcquisitionException)
{
ViewBag.Relogin = "true";
return View();
}
catch (Exception eee)
{
ViewBag.Error = "An error has occurred. Details: " + eee.Message;
return View();
}
}
それはことが判明します統合は、このようなものです:
- それはいくつかのメールボックスがOffic上に配置されているハイブリッド取引システム
- ですe 365.
- いくつかのメールボックスは構内にあります。
- 他のメールボックスには、サードパーティのメールシステム(インター)(カスタムスクリプト経由でAD接続へのディレクトリ同期)である
質問
どのように私はこのような状況のためのコードを防御する必要がありますか? (または同様のハイブリッド状況)?
私はあなたの要求を完全に理解していません。あなたは、上記のコードを守るためにあなたが何を意味するかを明確にすることができますか?あなたは上記のコードのリファクタリングをお探しですか? – Nkosi
@ Nkosiのテナントの場合、アカウントには1から4までの「n」構成が表示されます。テナントに接続すると、ユーザーはそのバケツの一部または全部にユーザーを含めることができます。私は "ADのみ"のプロパティを読み取ってから、 "Exchangeのみ"のプロパティに移動する方法はわかりません。Azure AD、O365ディレクトリ、およびIntuneの私の理解は、それらが一緒に同期される異なるADインスタンスであるということです。 (これはpowershellで確認できます)。 – LamonteCristo
わかりました。私はそれを得る。上記のコードは、これらの4つの権限を通過するか、それとも単なる例ですか?私は戦略パターンを考えています。 – Nkosi