政府機関のアカウントで ADAL ライブラリを使用すると、サーバーのタイムアウトが原因で認証トークンの要求が失敗します。サーバーへの EWS 呼び出しを行うには、トークンが必要です。使用されている機関は「https://logon.microsoftonline.us」です。リソースは「https://outlook.office.us」です。
パブリックテナント(自社テナント)と自社製品からトークンを取得する場合は問題ありません。"" https://logon.microsoftonline.com "を使用してトークンを受け取ります。リソースは " https://outlook.office.com " です。
「https://owa.us.af.mil/f5-w-{REDACTED}/adfs/ls/?client-request-id={REDACTED }」で同じ認証情報を使用してサーバーにアクセスできます。しかし、ADAL は " https://federation.us.af.mil/adfs/ls/?login_hint= {編集済み}.af.mil&client-request-id={編集済み}&username={編集済み}.af.mil&wa= でタイムアウトしますwsignin1.0&wtrealm={編集済み}"
政府機関のサーバーには適切な ADFS 構成がありますか? もしそうなら、考えられる解決策は何ですか?
テナントのセットアップは正しく行われていますか? パブリック アプリ アクセス用のパブリック テナントと、政府クライアント用の政府テナントが必要ですか? それとも交換可能ですか?
トークン要求を処理するために、パブリックおよび政府の AAD アプリをセットアップします。それが問題だったのではないかと考えました。変化なし。また、リクエストで使用される権限とリソースについていくつかのバリエーションを作成しました。変化なし。さらに、ADAL を利用して、標準の Apple HTTPS プロトコルの代わりに HTTPS プロトコルを使用しました。
以下は、使用されるコンテキストのセットアップとトークンの呼び出し方法です。
let authContext = ADAuthenticationContext(authority: authority, validateAuthority: true, error: &error)
authContext?.credentialsType = AD_CREDENTIALS_EMBEDDED
authContext?.acquireToken(withResource: self.resource, clientId: self.clientId, redirectUri: self.redirectUri,
userId: self.userID!, completionBlock: { result in })
トークン リクエストは、この時点で常にタイムアウトします。
ADAL 2.7.5 iOS Sim 12.1 [2018-12-12 17:14:38 - F06F784C-7F5B-4231-BE34-714AF8204357] -webAuthDidFailWithError: エラー Domain=NSURLErrorDomain Code=-1001 "要求がタイムアウトしました。" UserInfo={NSUnderlyingError=0x600002fa5380 {エラー ドメイン=kCFErrorDomainCFNetwork コード=-1001 「リクエストがタイムアウトしました。」UserInfo={NSErrorFailingURLStringKey= https://federation.us.af.mil/adfs/ls/?login_hint= {編集済み}.af.mil&client-request-id={編集済み}&username={編集済み}.af.mil&wa=wsignin1 .0&wtrealm={編集済み}
ユーザーは、空白の画面でポップアップ ウィンドウが表示されます。ウィンドウには通常、アプリの使用許可を求めるテキストが表示されます。約 60 秒後にタイムアウト メッセージがヒットします。