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