簡體   English   中英

我可以將 Microsoft Graph SDK 與 Azure AD Easy Auth 一起使用嗎

[英]Can I use the Microsoft Graph SDK with Azure AD Easy Auth

我在 Azure 上有一個 C# .NET MVC Web 應用程序,我為 Azure AD 帳戶啟用了Easy Auth 我希望能夠同時使用Microsoft Graph SDK

在上面鏈接的 cgillum 撰寫的 Easy Auth 文章中,他說:

我還要指出,我使用了 HTTP 原語,而不是使用官方的 Graph API Client SDK。 這主要是為了強調可以使用任何語言編寫對 Azure AD Graph API 的訪問,並且不需要任何 SDK(盡管如果您願意,當然可以使用 SDK)。

我知道這是一年多以前寫的,考慮到 AAD Graph,但他說可以使用 AAD Graph SDK,所以也許 MS Graph 是可能的。 (老實說,我很高興看到這兩種方式,但似乎有很大的推動力來使用 MS Graph 而不是 AAD Graph)

目前,我可以像這樣在控制器中對 Microsoft Graph 端點 ( https://graph.microsoft.com ) 進行 url 調用:

public JObject GetMe()
{
    string accessToken = this.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    var url = "https://graph.microsoft.com/v1.0/me"; // MS Graph

    using (var httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        var response = httpClient.GetStringAsync(url).Result;
        var json = JObject.Parse(response);
        return json;
    }
}

這將返回:

{
   "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users/$entity",
   "id":"a4cxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
   "businessPhones":[
      "(xxx) xxx-xxxx"
   ],
   "displayName":"Ryan Taite",
   "givenName":"Ryan",
   "jobTitle":"xxxxxxxxxxxx",
   "mail":"xxxxxxx@xxxxxxx.xxxxx",
   "mobilePhone":"(xxx) xxx-xxxx",
   "officeLocation":"xxxxxxx",
   "preferredLanguage":"xxxxxxx",
   "surname":"Taite",
   "userPrincipalName":"xxxxxxx@xxxxxxx.xxxxx"
}

我是否僅限於構建 url 調用?
是否可以利用Microsoft.Graph SDK和 Easy Auth 以便我可以進行如下調用,其中new AzureAuthenticationProvider()會以某種方式利用 Easy Auth accessToken ?:

public async Task<User> GetMeViaMsGraph()
{
    Microsoft.Graph.GraphServiceClient graphServiceClient = new Microsoft.Graph.GraphServiceClient(authenticationProvider:new AzureAuthenticationProvider());
    Microsoft.Graph.User user = await graphServiceClient.Me.Request().GetAsync();
    return user;
}

我在msgraph-sdk-dotnet GitHub 上找到了一個討論AuthenticationProvider的概述部分,但我仍然不確定我要問的是否可行。


更新:

按照下面南宇的例子,我能夠得到想要的結果,但我只是想在這里充實一下,以防其他人想看到。

在我的控制器中,我有這些功能:

 // Get myself as a Microsoft.Graph User Object public User GetMeViaMsGraph() { string accessToken = this.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"]; GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProviderTest(accessToken)); // implementation not shown here, but it's the exact same as Nan Yu's User me = graphClient.Me.Request().GetAsync().Result; return me; } // Send the User object to my Index page public ActionResult Index() { return View(GetMeViaMsGraph()); }

我刪除了async Task<User>await因為我遇到了問題需要繼續前進。

在我的Index.cshtml頁面上,我可以快速顯示我可以訪問 User 對象及其數據:

 @using Microsoft.Graph; @model User <div> @Model.DisplayName @Model.GivenName @Model.SurName @Model.JobTitle </div>

SDK 並非支持所有 API 的功能,這也是我們通常使用 HTTP 原語的另一個原因。 但是,如果您仍然想將 Easy Auth 與 Microsoft.Graph SDK 一起使用,您可以添加一個類似以下內容的類:

public class AzureAuthenticationProviderTest : IAuthenticationProvider
    {
        string accessToken = string.Empty;
        public AzureAuthenticationProviderTest(string accessToken) {
            this.accessToken = accessToken;

        }

        public async Task AuthenticateRequestAsync(HttpRequestMessage request)
        {
            try
            {

                // Append the access token to the request.
                request.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
            }
            catch (Exception ex)
            {
            }
        }
    }

傳遞您的訪問令牌並使用 sdk,例如:

 string accessToken = "YourAccessToken";
 GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProviderTest(accessToken));  
 var groupIDs = await graphClient.Users["UserUPN"].GetMemberGroups(false).Request().PostAsync();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM