gpt4 book ai didi

azure - 是否可以使用azure daemon App来操作OneNote?

转载 作者:行者123 更新时间:2023-12-03 03:08:36 33 4
gpt4 key购买 nike

为了使用azure的守护程序应用程序操作OneNote,我创建了一个新的ClientID,并通过该ClientID进行用户认证,获取了Access Token,并使用它实现了对OneNote API的访问。

但是,不是通过用户身份验证,而是通过 ClientID 和证书获取访问 token ,并拒绝使用它访问 OneNote API。(401 未经授权)

如何从 azure dameon 应用程序操作 OneNote?

<小时/>

我尝试的方式

证书创建AccessToken引用如下实现。 https://azure.microsoft.com/ja-jp/resources/samples/active-directory-dotnet-daemon-certificate-credential/

具体AccessToken获取代码如下,

public  async Task AuthWithCertAsync(string tenant, string clientID, string certName)
{
var authority = $"{aadInstance}{tenant}";
var authContext = new AuthenticationContext(authority);

//refer: above URL
ClientAssertionCertificate certCred = GetCertificate(clientID, certName);
if (certCred == null) {return false;}

//"https://graph.microsoft.com/";
var graphResult = await authContext.AcquireTokenAsync(graphResourceID, certCred);
graphToken = graphResult.AccessToken;

//"https://www.onenote.com/";
var onenoteResult = await authContext.AcquireTokenAsync(onenoteResourceID, certCred);
onenoteToken = onenoteResult.AccessToken;
}

有了这个graphToken,就可以成功访问Graph API。

    using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {graphToken}");
//e.g. "https://graph.microsoft.com/v1.0/groups", "https://graph.microsoft.com/v1.0/users"
var response = await client.GetStringAsync(url);
...
}

但是,如果目标 URL 是 onenote 上的 API,则会失败。

    using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {graphToken}");
//e.g:"https://graph.microsoft.com/beta/users/{userID}/notes/notebooks"
// Occured HttpRequestException(401 Unauthorized)
var response = await client.GetStringAsync(url);
...
}

此请求返回 HTTP 401 未经授权状态。

在 onenoteToken 上访问 OneNote API 时也失败。

    using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {onenoteToken}");
//e.g.:"https://www.onenote.com/api/v1.0/users/{userID}/notes/notebooks"
var response = await client.GetStringAsync(url);
return response;
}

此请求还会返回 HTTP 401 未经授权状态。

<小时/>

Azure Active Directory 中的应用程序设置:

  • 类型:
    • 网络应用程序和/或网络 API
  • Multi-Tenancy :
    • 开启
  • 对其他应用程序的权限:
    • Graph、OneNote、Active Directory、SharePoint:应用程序权限均已选中。

在目标租户的管理员帐户中,访问并接受以下管理员同意 URL。

https://login.microsoftonline.com/common/adminconsent?client_id={clientID}&state={state}&redirect_uri={redirectUrl}

更新

根据https://stackoverflow.com/a/41890179/1411521的回答,我了解到当前的 Graph API 无法通过守护进程 App 访问 OneNote。 (2017-1-31)

但是,OneNote API 的应用程序权限可以设置如下。

  • 查看和修改所有用户的备注
  • 查看所有用户的注释

尽管它们是有效的,但是什么导致以下代码出现身份验证错误(401 Unauthorized)?

  using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {onenoteToken}");
//e.g.:"https://www.onenote.com/api/v1.0/users/{userID}/notes/notebooks"
var response = await client.GetStringAsync(url); // Occured HttpRequestException(401 Unauthorized)
...
}

最佳答案

您混合使用了 Microsoft GraphOneNote API

您获得的 token 用于Microsoft Graph REST,您可以按照文档here通过Microsoft Graph REST测试版操作OnenNote (测试版引用->OneNote)。

如果您想使用 OneNoe API,您可以引用此处的文档 authentication .

更新

要列出笔记本,我们需要 Notes.Read、Notes.ReadWrite.CreatedByApp、Notes.ReadWrite、Notes.Read.All 或 Notes.ReadWrite.All 等权限。但是,Microsoft Graph 的客户端凭据流没有此类权限。 enter image description here如果您希望 Microsoft Graph 支持客户端凭据流程来操作 OneNote,可以通过 here 提交反馈.

关于azure - 是否可以使用azure daemon App来操作OneNote?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888264/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com