Console App中的OneDrive SDK身份验证问题

时间:2017-01-18 17:12:43

标签: c# onedrive

我在控制台应用程序中对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

1 个答案:

答案 0 :(得分:1)

现在,MSA身份验证仅支持桌面和Windows Mobile应用程序,因为它需要用户界面来要求用户登录,因为您有一个控制台应用程序。所以问题是构建一个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,但如果您在某处获取并将其传递到控制台应用程序似乎可行,那么您可以将POST请求发送到{{ 1}}你必须兑换一个访问令牌。我已经搜索了一段时间,并没有找到一个很好的控制台应用程序示例来获取OAuth for Microsoft帐户,抱歉。如果您找到了控制台应用程序进行身份验证的好方法,请随时为MSAAuthenticator发送PR。