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

4

我正在一个控制台应用程序中使用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
2个回答

2

目前 MSA 认证仅支持桌面和 Windows 手机应用程序,因为它需要 UI 要求用户登录,这在您的情况下被破解了,因为您拥有一个控制台应用程序。因此,问题是要构建一个 IAuthenticationProvider,该提供者在请求消息中设置 Authorization 标头,例如:

    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,但如果您在某个地方获取它并将其传递给您的控制台应用程序,则可以使用您拥有的code进行POST请求来兑换访问令牌。我已经搜索了一段时间,并没有找到一个好的控制台应用程序示例来获取Microsoft帐户的OAuth,很抱歉。如果您找到了控制台应用程序进行身份验证的好方法,请随时为MSAAuthenticator发送PR。

谢谢,我会看一下这个并看看我能得出什么。 - jdave

0

这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Toni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接