控制台应用程序中的 OneDrive SDK 身份验证问题

OneDrive SDK Authentication Issue in Console App

我正在控制台应用程序中针对 OneDrive SDK 进行编码。我在尝试正确验证时遇到了一些麻烦。我很想知道以前是否有人这样做过或可以指出正确的方向?

到目前为止的代码:

 [STAThread]
    static void Main(string[] args)
    {
        var scopes = new[] {"onedrive.readonly", "wl.signin"};
        var msaAuthProvider = new MsaAuthenticationProvider(ClientId, "https://login.live.com/oauth20_desktop.srf", scopes);

        msaAuthProvider.AuthenticateUserAsync();
    }

每当我 运行 我的调试器时,我都会看到 isAuthenticated 的 属性 设置为 false

现在 MSA 身份验证仅支持桌面和 Windows 移动应用程序,因为它需要 UI 要求用户登录,这在您的情况下中断了,因为您有一个控制台应用程序。所以问题是构建一个 IAuthenticationProvider,它在请求消息中设置 Authorization header,例如:

    public async Task AuthenticateRequestAsync(HttpRequestMessage request)
    {
        request.Headers.Authorization = new AuthenticationHeaderValue("bearer", await GetAccessTokenFromSomeWhere());
    }

IAuthenticationProvider 接口在 Microsoft.Graph.Core 中定义,您可以将其传递给 OneDriveClient 构造函数,以便 OneDriveClient 为您向 OneDrive API 发出请求。

根据您拥有控制台应用程序的信息,我建议您查看 Microsoft OAuth 的代码流以获取访问令牌并将其传递给您的身份验证提供商。

我不确定您如何从 OAuth 流程中获取 code,但如果您在某处获取它并将其传递给您的控制台应用程序似乎是可行的,那么您可以使 POST 请求 code 您必须兑换访问令牌。我已经搜索了一段时间,但没有找到一个很好的控制台应用程序示例来获取 Microsoft 帐户的 OAuth,抱歉。如果您找到控制台应用程序进行身份验证的好方法,请随时为 MSAAuthenticator.

发送 PR

我在没有交互的情况下使用 OAuth 2.0 Resource Owner Password grant 和原始 HTTP 请求成功读取了用户的文件。

samples for authentication in daemon applications with application credentials,但首先我们需要知道应用程序是如何注册的,是否属于Azure中的目录,因为应用程序权限需要由目录管理员授予。