【问题标题】:Native App and Azure AD - Hello World本机应用程序和 Azure AD - Hello World
【发布时间】:2017-01-19 07:47:49
【问题描述】:

我正在尝试创建一个需要有效用户的控制台应用程序的简单示例。该应用程序是一个简单的控制台应用程序:

static void Main(string[] args)
{
    string authority = "https://login.windows.net/----------------.onmicrosoft.com";
    AuthenticationContext context = new AuthenticationContext(authority);
    Console.WriteLine("Context created");

    string resource = "ConsoleApp1";
    string clientId = "------------------------------------";
    string redirectUri = "http://localhost";

    var parameters = new PlatformParameters(PromptBehavior.RefreshSession);

    context.TokenCache.Clear();


    // Throws AggregateException--> AADSTS50105: The signed in user is not assigned to a role for the application
    var token = Task.Run(() => context.AcquireTokenAsync(resource, clientId, new Uri(redirectUri), parameters)).Result;

    Console.WriteLine("Hello, authorized user");
}

应用程序启动,显示登录窗口,然后抛出异常

AADSTS50105:登录的用户未分配给应用程序的角色

在 Azure 门户中,我已将 ConsoleApp1 注册为本机应用程序。

必需的权限下,我勾选了:

  • 登录并阅读用户资料
  • 以登录用户身份访问目录

除此之外,我很困惑,错误消息告诉我需要为用户分配某种角色,但我在应用程序的设置中找不到任何位置。有人可以帮忙解释一下吗?

【问题讨论】:

    标签: c# azure active-directory identity adal


    【解决方案1】:

    您指定了不正确的资源(ConsoleApp1)。资源应该代表您已授予此应用程序并且您为其获取访问令牌的资源。

    您似乎已授予此应用程序 Azure AD Graph 的权限,您是否要获取访问令牌以使用 Azure Graph REST?

    如果我理解正确,您可以使用https://graph.windows.net 替换资源。

    有关与 Azure AD 集成的更多详细信息,您可以参考here

    【讨论】:

    • 这是一个很好的线索,飞!我对此的直接回应如下:我所追求的场景实际上只是用于将用户登录到应用程序,并在令牌中检索有关该用户的最小信息集。我希望这个令牌将包含用户声明。我的假设是否正确?
    • 通常用于对资源进行授权的访问令牌。您可以拨打https://graph.windows.net/{tenantId}/me?api-version=1.6 使用access_token 获取用户信息。如果您希望应用程序使用 Azure AD 实现身份验证,我们可以通过 OpenId Connect 从 Azure AD 获取 id_token。您可以参考here 获取代码示例。而this link是供Azure AD发行的token参考
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    相关资源
    最近更新 更多