SharePoint 2013应用程序中的Visual Studio中的应用程序具有一个托克纳赫珀级,简化了使用OAuth连接到SharePoint 2013 ClientContext。我正在使用这个类来远程连接到SharePoint 2013(在Office 365上)。

我可以使用tokenhelper.getClientContextWithAuthorizationCode方法在具有HttpContext.Current的Web应用程序中运行时将ClientContext获取OAUTH授权代码。但是,如果我在控制台应用程序或没有httpContext.Current的其他上下文中使用相同的代码,则远程SharePoint 2013服务器返回(400)错误请求。

我已经将问题缩小到microsoft.identityModel.s2s.protocols.oauth2.oauth2s2sclient.issue()方法。当存在HttpContext时,它有效,但没有它获得(400)错误请求错误。

我尝试使用moq框架伪造httpcontext,但这不起作用。

在此处发生在Tokenhelper.getAccessToken方法中:

OAuth2S2SClient client = new OAuth2S2SClient();
OAuth2AccessTokenResponse oauth2Response;
try
{
    oauth2Response =
        client.Issue(AcsMetadataParser.GetStsUrl(realm), oauth2Request) as OAuth2AccessTokenResponse;
}
.

任何想法?

有帮助吗?

解决方案

我终于能够弄清楚我做错了什么:

1)创建OAuth连接时返回的授权代码仅适用于该浏览器会话。因此,为什么我稍后无法在后端服务或新浏览器会话中重复使用该授权代码。

2)在重定向页面上,我使用返回的授权代码创建一个新的访问令牌。从访问令牌,我可以检索刷新令牌。

3)刷新令牌是我稍后可以存储和重用以从后端代码或新浏览器会话创建客户端上下文。

所以,在简单的壳中,要重用OAuth令牌,您必须使用刷新令牌,而不是授权代码。

许可以下: CC-BY-SA归因
scroll top