質問

Visual StudioのSharePoint 2013アプリには、SharePoint 2013 ClientContextに接続するためにOAuthを使用する簡単なトークンヘルパークラスがあります。このクラスを使ってSharePoint 2013(Office 365)にリモート接続しています。

TokEnhelper.getClientContextWithAuthorizationCodeメソッドを使用して、HttpContext.currentを持つWebアプリケーションで実行中のOAuth認証コードでClientContextを取得できます。ただし、コンソールアプリケーションまたは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)リフレッシュトークンは、後で保存して再利用することで、バックエンドコードまたは新しいブラウザセッションからクライアントコンテキストを作成することができます。

それで、Nutshellでは、OAuthトークンを再利用するには、承認コードではなく、リフレッシュトークンを使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top