我正在尝试使用OAuth2令牌来调用Web(api)服务,该令牌基于使用ADAL.Net登录到AAD加入的计算机上的AAD受管用户帐户-特别是使用此示例: https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/wiki/AcquireTokenSilentAsync-using-Integrated-authentication-on-Windows-(Kerberos)
但是我不断收到异常消息:未知的用户类型
在我的设置中,我已使用同步的AAD用户帐户登录到AAD专用网络内的计算机。然后,我使用WindowsAuthentication运行示例代码。
经过一些调试后,我可以缩小要在ADAL.Net中从此方法引发的异常
protected internal /* internal for test only */ override async Task PreTokenRequestAsync()
{
await base.PreTokenRequestAsync().ConfigureAwait(false);
if (!SupportADFS)
{
var userRealmResponse = await _commonNonInteractiveHandler.QueryUserRealmDataAsync(Authenticator.UserRealmUriPrefix)
.ConfigureAwait(false);
if (string.Equals(userRealmResponse.AccountType, "federated", StringComparison.OrdinalIgnoreCase))
{
WsTrustResponse wsTrustResponse = await _commonNonInteractiveHandler.PerformWsTrustMexExchangeAsync(
userRealmResponse.FederationMetadataUrl,
userRealmResponse.CloudAudienceUrn,
UserAuthType.IntegratedAuth).ConfigureAwait(false);
// We assume that if the response token type is not SAML 1.1, it is SAML 2
_userAssertion = new UserAssertion(wsTrustResponse.Token, (wsTrustResponse.TokenType == WsTrustResponse.Saml1Assertion) ? OAuthGrantType.Saml11Bearer : OAuthGrantType.Saml20Bearer);
}
else
{
throw new AdalException(AdalError.UnknownUserType);
}
}
}
由于我的设置中的所有内容都是通过AAD管理的,所以我看不到为什么需要“联合”用户帐户类型才能检索令牌。
所以我怀疑我需要以其他方式获取令牌!? 任何帮助将不胜感激;)
答案 0 :(得分:0)
经过调查,我们发现以上代码(ADAL.Net)仅可用于联合设置。
联合身份验证意味着您拥有一个本地网络-存放Windows用户帐户-已连接到Azure AD网络-该网络随后将这些帐户“联合”到Azure AD。但是,最好让ADAL小组的成员对此发表评论。
可以使用以下代码在纯Azure AD(托管设置)中为Windows用户帐户获取令牌:
var connString = $"RunAs=App;AppId={appId};TenantId={tenantId};AppKey={appKey};";
var azureServiceTokenProvider = new AzureServiceTokenProvider(connString2);
var accessToken = azureServiceTokenProvider.GetAccessTokenAsync(service, tenantId).Result;
同样,它的文档记录也不够好,因此,Microsoft提供的任何清晰信息都将是不错的选择。