检索访问令牌

时间:2018-02-19 21:09:30

标签: microsoft-graph azure-ad-graph-api

我创建了一个MVC应用程序,用于将工作升级到组织内的其他人。我已将我组织中的所有成员添加到AAD, 并在那里注册了一个应用程序,创建了应用程序服务并将该应用程序服务链接到已启用SSO的已注册应用程序。

现在,每当有人访问该应用时,他们都可以使用各自的凭据成功登录。

我想知道的是检索我的AAD中的所有成员并将其显示在下拉列表中,以便任何人只需查看下拉列表就可以升级到其他成员。

我尝试使用示例图SDK来获取组织中的用户名 使用此代码

    private string redirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"];
    private string appId = ConfigurationManager.AppSettings["ida:AppId"];
    private string appSecret = ConfigurationManager.AppSettings["ida:AppSecret"];
    private string scopes = ConfigurationManager.AppSettings["ida:GraphScopes"];

public async Task<string> GetUserAccessTokenAsync()
    {
        string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
        HttpContextWrapper httpContext = new HttpContextWrapper(HttpContext.Current);
        TokenCache userTokenCache = new SessionTokenCache(signedInUserID, httpContext).GetMsalCacheInstance();
        //var cachedItems = tokenCache.ReadItems(appId); // see what's in the cache

        ConfidentialClientApplication cca = new ConfidentialClientApplication(
            appId, 
            redirectUri,
            new ClientCredential(appSecret),
            userTokenCache,
            null);

        try
        {
            AuthenticationResult result = await cca.AcquireTokenSilentAsync(scopes.Split(new char[] { ' ' }), cca.Users.First());
            return result.AccessToken;
        }

        // Unable to retrieve the access token silently.
        catch (Exception)
        {
            HttpContext.Current.Request.GetOwinContext().Authentication.Challenge(
                new AuthenticationProperties() { RedirectUri = "/" },
                OpenIdConnectAuthenticationDefaults.AuthenticationType);

            throw new ServiceException(
                new Error
                {
                    Code = GraphErrorCode.AuthenticationFailure.ToString(),
                    Message = Resource.Error_AuthChallengeNeeded,
                });
        }
    }

范围有一些变化。

<add key="ida:AppId" value="xxxxx-xxxxxxx-xxxxxx-xxxxxxx"/>
<add key="ida:AppSecret" value="xxxxxxxxxxx"/>
<add key="ida:RedirectUri" value="http://localhost:55065/"/>
<add key="ida:GraphScopes" value="User.ReadBasic.All User.Read Mail.Send Files.ReadWrite"/>

这使我能够获得组织中所有用户的基本详细信息。 但是我如何在我的应用程序中实现这一点,其中认证相关的东西仅在azure中完成,并且在整个解决方案中没有用于认证和授权的代码。

由于

Subham,NATHCORP,印度

1 个答案:

答案 0 :(得分:0)

  

但是我如何在我的应用程序中实现这一点,其中认证相关的东西仅在azure中完成,并且在整个解决方案中没有用于认证和授权的代码。

根据我的理解,您使用的是内置功能App Service Authentication / Authorization。您可以按here配置您的网络应用以使用AAD登录。您需要按如下方式为AD应用程序配置所需的权限:

enter image description here

注意:对于Azure AD图,您需要为 Windows Azure Active Directory API设置相关权限。对于Microsoft Graph,您需要配置 Microsoft Graph API。

然后,您需要为您的网络应用配置其他设置。您可以访问https://resources.azure.com/,选择您的网络应用并更新App Service Auth Configuration,如下所示:

注意:要使用Microsoft Graph API,您需要将df['A'].tolist()设置为resource。详细信息,您可以关注here

要在应用程序中检索访问令牌,您可以从请求标头https://graph.microsoft.com中获取它。详细信息,您可以关注Working with user identities in your application

此外,您可以使用Microsoft.Azure.ActiveDirectory.GraphClient包用于Microsoft Azure Active Directory图谱API,使用相关访问令牌的Microsoft Graph API Microsoft.Graph包。