2017-02-10 179 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

相关问题