我正在开发一个MVC应用程序,该应用程序应该获得有关经过身份验证的用户拥有的所有Azure资源的信息。
我在多个组织模式下从Visual Studio Wizzard执行身份验证部分。
所以我反对:https://login.microsoftonline.com/common
现在我需要从应用程序的控制器获取访问令牌。 我试图从该代码中获取身份验证令牌:
ClientCredential cc = new ClientCredential(_clientId, _servicePrincipalPassword);
AuthenticationContext context = new
AuthenticationContext("https://login.microsoftonline.com/common");
var result = await context.AcquireTokenAsync("https://management.azure.com/", cc);
return result.AccessToken;
我得到一个令牌,但在使用它时,我收到一个InvalidAuthenticationToken。 我的令牌缺少其中一项声明:' puid',' altsecid'或者' oid'。
我不知道该怎么做,需要一些帮助。 我很确定几天前这段代码可以使用。
答案 0 :(得分:0)
我正在开发一个MVC应用程序,该应用程序应该获得有关经过身份验证的用户拥有的所有Azure资源的信息。
根据您的代码,您正在使用客户端凭据流来对应用程序标识进行身份验证,因为应用程序进行身份验证意味着不涉及用户。要获得您的要求,您可以使用OAuth 2.0 authorization code flow。 Here是如何构建使用Azure AD调用Web API的多租户SaaS Web应用程序的代码示例。
在Startup.Auth.cs代码示例中,AuthorizationCodeReceived
通知可用于获取ARM rest api的令牌。 SecurityTokenValidated
通知包含自定义调用者验证逻辑。