【发布时间】:2018-11-30 01:59:09
【问题描述】:
我有一个客户端应用程序,我想检查 azure 广告令牌声明。通过客户端应用程序,我指的是在 Windows 10 桌面上运行的可执行文件或在用户上下文中运行的 UWP 应用程序。
我试过了:
var authenticationContext =
new AuthenticationContext("https://login.microsoftonline.com/common");
var userCredential = new UserCredential();
var result = await authenticationContext
.AcquireTokenAsync("https://graph.microsoft.com/.default",
"https://mytenant.onmicrosoft.com/myguid",
userCredential);
password_required_for_managed_user 失败。
可用文档声称此方法使用 Kerberos,如果属实,Azure ADd 不支持 Kerberos,因此会失败。
var _publicClientApp = new PublicClientApplication(clientId);
var user = new ApplicationUser {
DisplayableId = upn,
Identifier = Guid.NewGuid().ToString()
// other fields can be null
};
var authenticationResult =
await _publicClientApp.AcquireTokenSilentAsync(_scopes, user);
抛出MsalUiRequiredException (no token in cache)。
这不再使用 ADAL,它使用 AcquireTokenSilentAsync 的不同实现:
var authContext =
new AuthenticationContext("https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCache.DefaultShared);
var result =
await authContext.AcquireTokenSilentAsync("https://graph.microsoft.com/.default", upn);
这会返回相同的MsalUiRequiredException
我很茫然。对于 Web 应用程序,浏览器缓存中会有一个 cookie,我可以使用标准运行时执行静默 SSO。
我是否必须在我的应用程序中嵌入一个网络服务器才能做到这一点?
【问题讨论】:
标签: c# oauth-2.0 azure-active-directory azure-authentication