tra*_*max 5 c# azure azure-active-directory azure-api-apps azure-ad-graph-api
我有一个MVC应用程序需要访问Azure中受Azure AD身份验证保护的私有API应用程序.因此,我需要获取Azure AD不记名令牌,将其转移到Zumo-Auth令牌中并使用它来访问API应用程序.
我正在阅读本教程,一切正常,直到我需要请求令牌authContext.这是代码的片段:
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);
Run Code Online (Sandbox Code Playgroud)
这条线authContext.AcquireToken(appIdUri, credential)是导致麻烦的线路.
如果appIdUri我给https://MyAppGateway-814485545465FAKE4d5a4532cd.azurewebsites.net/login/aad,我得到例外:
400:AdalServiceException:AADSTS50001:资源" https://MyAppGateway-814485545465FAKE4d5a4532cd.azurewebsites.net/login/aad "未注册该帐户.
但是这条确切的行在Reply UrlAD应用程序的列表中
当我尝试使用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/ ' 的角色
在这两种情况下,我都将App ID URIAD应用程序设置为" https://MyADDomain.onmicrosoft.com/MyAppName "或" https://MyADDomain.onmicrosoft.com/ ".并且列表中的两个名称Reply URL.
经过足够的尝试,我已经把它https://graph.windows.net作为appIdUri并获得了持票人令牌.但令牌在过去有效期(过去约1分钟).所以我对此无能为力.并得到了401-Unauthenticated当试图使用令牌登录到API应用程序.
我错过了什么?
我已经按照您所引用的教程进行操作:从Azure Active Directory验证的Web应用程序客户端调用Azure API应用程序
然后我能够检索令牌,正如您在下面的演示中看到的那样,我的代码与您的代码没有什么不同,除了它使用的是更高版本的using Microsoft.IdentityModel.Clients.ActiveDirectory库Async.
class Program
{
static void Main(string[] args)
{
var authContext = new AuthenticationContext(Constants.AUTHORITY);
var credential =
new ClientCredential(Constants.CLIENT_ID, Constants.CLIENT_SECRET);
var result = (AuthenticationResult)authContext
.AcquireTokenAsync(Constants.API_ID_URL, credential)
.Result;
var token = result.AccessToken;
Console.WriteLine(token.ToString());
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
AUTHORITY.第一部分是https://login.microsoftonline.com.最后一段是允许的租户.我们在portal.azure.com上设置允许的租户,转到我们的应用程序的网关,然后选择设置>身份> Azure Active Directory>允许的租户.我的租客是bigfontoutlook.onmicrosoft.com.
CLIENT_ID.我们从添加到Azure Active Directory的应用程序中检索此客户端ID.在manage.windowsazure.com> Active Directory>您的目录>应用程序>您的应用程序>配置中找到此信息.检索完毕后,我们必须将其添加到客户端ID字段中的Gateway的Azure Active Directory设置中.
CLIENT_SECRET.我们在检索客户端ID的相同位置创建/检索它.
API_ID_URL.我们通过选择设置>身份> Azure Active Directory>应用URL,在我们的Web API应用程序的Gateway刀片中检索此内容.
这些是适合我的.
class Constants
{
public const string AUTHORITY =
"https://login.microsoftonline.com/bigfontoutlook.onmicrosoft.com/";
public const string CLIENT_ID =
"0d7dce06-c3e3-441f-89a7-f828e210ff6d";
public const string CLIENT_SECRET =
"AtRMr+Rijrgod4b9Q34i/UILldyJ2VO6n2jswkcVNDs=";
public const string API_ID_URL =
"https://mvp201514929cfaaf694.azurewebsites.net/login/aad";
}
Run Code Online (Sandbox Code Playgroud)
这是解码的JWT访问令牌包含的内容.
{
typ: "JWT",
alg: "RS256",
x5t: "MnC_VZcATfM5pOYiJHMba9goEKY",
kid: "MnC_VZcATfM5pOYiJHMba9goEKY"
}.
{
aud: "https://mvp201514929cfc350148cfa5c9b24a7daaf694.azurewebsites.net/login/aad",
iss: "https://sts.windows.net/0252f597-5d7e-4722-bafa-0b26f37dc14f/",
iat: 1442346927,
nbf: 1442346927,
exp: 1442350827,
ver: "1.0",
tid: "0252f597-5d7e-4722-bafa-0b26f37dc14f",
oid: "5a6f33eb-b622-4996-8a6a-600dce355389",
sub: "5a6f33eb-b622-4996-8a6a-600dce355389",
idp: "https://sts.windows.net/0252f597-5d7e-4722-bafa-0b26f37dc14f/",
appid: "0d7dce06-c3e3-441f-89a7-f828e210ff6d",
appidacr: "1"
}.
Run Code Online (Sandbox Code Playgroud)
注意:这是一个带有一次性资源组的一次性活动目录帐户中的一次性应用程序,因此显示我的安全凭据不是问题.
| 归档时间: |
|
| 查看次数: |
8077 次 |
| 最近记录: |