2017-02-10 180 views
1

我正在編寫一個C#.NET應用程序。它連接到我們在配置爲使用AAD的Azure上的服務。反過來,我們的服務嘗試通過EWS撥打電話給Exchange。錯誤AADSTS65001,但沒有同意提示只有一個用戶

直到我們最近用新的應用程序註冊將我們的服務位部署到新的Azure Web應用程序之前,這一切都很好。它們都配置正確,我們團隊中的其他開發人員可以使用該服務進行身份驗證並按預期使用它。

當我嘗試連接到服務,我得到以下錯誤: AADSTS65001:用戶或管理員尚未同意使用ID爲「61a8b794-7f67-4a01-9094-fcdd45693eaa」的應用程序。爲此用戶和資源發送交互式授權請求。 跟蹤ID:ece7c5d0-2ecb-4096-a87a-2cd33271d65d 相關ID:093b5935-3b06-4d76-91a9-6619bc179544 時間戳:2017年2月9日23:19:28Z

的同意提示從來沒有出現對我來說當部署新服務後嘗試連接時。

我不確定導致此錯誤發生的用戶帳戶是什麼(它發生在使用我的帳戶的多臺機器上),而其他人可以成功連接。

下面是一些用於獲取令牌在服務代碼:

var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext; 

var upn = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn); 
var email = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email); 
var userName = upn != null ? upn.Value : email?.Value; 

accessToken = bootstrapContext.Token; 

ClientCredential clientCred = new ClientCredential("61a8b794-7f67-4a01-9094-fcdd45693eaa", appKey); 
UserAssertion assertion = new UserAssertion(accessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer", userName); 

AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/microsoft.onmicrosoft.com"); 
AuthResult = authContext.AcquireToken("https://outlook.office365.com", clientCred, assertion); 

在我的球隊任何想法,爲什麼我不會同意的提示,但其他用戶有哪些?

回答

0

根據描述,您正在使用Azure AD開發多層應用程序。

既然您提到使用新應用程序後發生了此問題,您是否將您的新應用程序配置爲您的服務應用程序的knownClientApplications(61a8b794-7f67-4a01-9094-fcdd45693eaa)?

如果是的話,當您登錄您的網絡應用程序時(請參閱關於多層應用程序的here),您應該可以同意服務應用程序。

問題爲什麼只有你得到這個問題,其他人可能會同意這個應用程序。

請讓我知道它是否有幫助。

+0

感謝您的回覆! 爲了進一步說明,我們沒有更改客戶端的Azure AD應用註冊,只是授予它新服務的權限(除了以前的服務)。生成的同意提示是爲了授予通過客戶端訪問服務的權限。 新服務的已知客戶端應用程序已正確配置爲包含客戶端應用程序標識。其他用戶在登錄到更新的客戶端後收到同意提示。我沒有。這是同一個客戶,同一個(新)服務,除了我以外,所有用戶都會收到同意提示。 – Erin

+0

當您登錄客戶端時,是否有助於追加'提示=同意'來強制授予同意書? –

+0

不幸的是(嚴重的是,因爲我本來希望能夠引起這個問題的根源),所以問題不再重演。 我們通過新的應用程序註冊引入了服務的新實例,並且我收到了新版本的同意提示。神奇地(和令人費解地),這似乎也解決了以前版本服務的問題,儘管我從未同意過。 – Erin

相關問題