Pergunta

Os aplicativos do SharePoint 2013 no Visual Studio têm uma classe TokenHelper que simplifica o uso do OAuth para se conectar a um ClientContext do SharePoint 2013.Estou usando esta classe para conectar-me remotamente a um SharePoint 2013 (no Office 365).

Posso usar o método TokenHelper.GetClientContextWithAuthorizationCode para obter o ClientContext com o código de autorização OAuth ao executar em um aplicativo da web que possui um HttpContext.Current.No entanto, se eu usar esse mesmo código em um aplicativo de console ou outro contexto onde não haja HttpContext.Current, o servidor remoto do SharePoint 2013 retornará (400) Bad Request.

Limitei o problema ao método Microsoft.IdentityModel.S2S.Protocols.OAuth2.OAuth2S2SClient.Issue().Quando há um HttpContext, ele funciona, mas sem ele ocorre o erro (400) Bad Request.

Tentei usar a estrutura Moq para falsificar um HttpContext, mas também não funcionou.

A falha ocorre no método TokenHelper.GetAccessToken aqui:

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

Alguma ideia?

Foi útil?

Solução

Finalmente consegui descobrir o que estava fazendo de errado:

1) O Código de Autorização retornado ao criar a conexão OAuth só é válido para aquela sessão do navegador.É por isso que não pude reutilizar esse código de autorização posteriormente em serviços de back-end ou em novas sessões do navegador.

2) Na página de redirecionamento, utilizei o Código de Autorização retornado para criar um novo Token de Acesso.Do token de acesso eu poderia recuperar o token de atualização.

3) O token de atualização é o que posso armazenar e reutilizar posteriormente para criar contextos de cliente a partir de código de back-end ou novas sessões do navegador.

Então, resumindo, para reutilizar o token OAuth, você deve usar o Token de Atualização, não o Código de Autorização.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top