【发布时间】:2015-12-11 21:17:09
【问题描述】:
我有一个 MVC 应用程序需要访问受 Azure AD 身份验证保护的 Azure 中的私有 API 应用程序。所以我需要获取 Azure AD 不记名令牌,将其传输到Zumo-Auth 令牌并使用它来访问 API 应用程序。
我正在检查this tutorial,一切正常,直到我需要从authContext 请求令牌。这是一段代码的sn-p:
var authContext = new AuthenticationContext(
"https://login.microsoftonline.com/MyADDomain.onmicrosoft.com");
ClientCredential credential = new ClientCredential(
"04472E33-2638-FAKE-GUID-F826AF4928DB",
"OMYAPIKEY1x3BLAHEMMEHEHEHEHEeYSOMETHINGRc=");
// Get the AAD token.
var appIdUri =
"https://MyAppGateway-814485545465FAKE4d5a4532cd.azurewebsites.net/login/aad";
//var appIdUri = "https://MyADDomain.onmicrosoft.com/MyAppName";
//var appIdUri = "https://MyADDomain.onmicrosoft.com/";
//var appIdUri = "https://graph.windows.net";
AuthenticationResult result =
authContext.AcquireToken(appIdUri, credential); // <-- can't get the token from AD
// downhill from here
var aadToken = new JObject();
aadToken["access_token"] = result.AccessToken;
var appServiceClient = new AppServiceClient(
"https://MyAppGateway-814485545465FAKE4d5a4532cd.azurewebsites.net/");
// Send the AAD token to the gateway and get a Zumo token
var appServiceUser = await appServiceClient.LoginAsync("aad", aadToken);
带有authContext.AcquireToken(appIdUri, credential) 的行是引起麻烦的行。
如果appIdUri我给https://MyAppGateway-814485545465FAKE4d5a4532cd.azurewebsites.net/login/aad,我得到异常:
400:AdalServiceException:AADSTS50001:资源“https://MyAppGateway-814485545465FAKE4d5a4532cd.azurewebsites.net/login/aad”未为该帐户注册。
但是这条确切的行在 AD 应用程序的 Reply Url 列表中
当我尝试将https://MyADDomain.onmicrosoft.com/MyAppName 或https://MyADDomain.onmicrosoft.com/ 用作appIdUri 时,我收到一条不同的异常消息:
400:AdalServiceException:AADSTS50105:应用程序“04472E33-2638-FAKE-GUID-F826AF4928DB”未分配给应用程序“https://MyADDomain.onmicrosoft.com/MyAppName”的角色
或者
400:AdalServiceException:AADSTS50105:应用程序“04472E33-2638-FAKE-GUID-F826AF4928DB”未分配给应用程序“https://MyADDomain.onmicrosoft.com/”的角色
在这两种情况下,我都将 AD 应用程序中的 App ID URI 设置为“https://MyADDomain.onmicrosoft.com/MyAppName”或“https://MyADDomain.onmicrosoft.com/”。以及Reply URL 列表中的两个名称。
最终经过足够的尝试,我将https://graph.windows.net 设置为appIdUri 并取回了不记名令牌。但是令牌的有效期是过去的(大约过去 1 分钟)。所以我对此无能为力。并在尝试使用令牌登录 API 应用程序时得到401-Unauthenticated。
我错过了什么?
【问题讨论】:
-
什么是
Zumo-Auth令牌?它与您的问题有多相关? -
@ShaunLuttin
Zumo-Auth是 Azure 中的 ApiApp 和移动应用程序用于身份验证的令牌。我需要它来通过 ApiApp 进行身份验证。我想这个问题并不重要,因为我似乎无法获得不记名令牌,这是之前的一步。 -
您可以通过浏览器登录吗? IE。您可以通过浏览器完成此步骤:azure.microsoft.com/en-us/documentation/articles/…
-
是的,通过浏览器登录没有问题 - 要求我输入 MS 密码并让我使用 API。虽然现在不确定——我在实验过程中改变了很多,我可能已经打破了这一点。我会在回到办公室时仔细检查。感谢这个指针 - 仔细检查这并没有出现在我的脑海中。
-
好吧,如果这行得通,那么我现在的答案可能会。
标签: c# azure azure-active-directory azure-ad-graph-api azure-api-apps