Compartilhar via


Autorizar usuários de suplemento hospedado em provedor no tempo de execução usando o OAuth

Forneça acesso autorizado aos recursos do SharePoint usando o OAuth em suplementos hospedados pelo provedor em tempo de execução.

Aplicável a: suplementos do SharePoint | SharePoint 2013 | SharePoint Online

Seus usuários podem acessar suplementos do SharePoint abrindo um site do SharePoint, escolhendo Conteúdo do Site e escolhendo o suplemento. O SharePoint redireciona os usuários para a Web remota, onde o suplemento hospedado pelo provedor é executado. Como os usuários acessam o suplemento do SharePoint, os usuários são autorizados pelo SharePoint antes de poderem acessar o suplemento.

Como alternativa, se os usuários forem diretamente para a URL do suplemento hospedado pelo provedor, esse suplemento deverá autorizá-los em tempo de execução usando o OAuth. Nesse cenário, o suplemento hospedado pelo provedor deve lidar com a autorização porque seu usuário não foi autorizado primeiro pelo SharePoint. O exemplo Core.DynamicPermissions mostra como solicitar dinamicamente permissões de um site usando o OAuth. Use esta solução para:

  • Autorize usuários que navegam diretamente para o suplemento hospedado pelo provedor em vez de acessar seu suplemento do SharePoint. Por exemplo, talvez você não queira que seus usuários usem a interface do usuário do SharePoint. Em vez disso, seus usuários podem usar um suplemento hospedado pelo provedor que mostra dados relevantes recuperados do SharePoint.

  • Crie um suplemento hospedado pelo provedor que possa autenticar usuários com o OAuth e que possa ser vendido por meio da Office Store.

Antes de começar

Para começar, baixe o suplemento de exemplo Core.DynamicPermissions do projeto de padrões e práticas do desenvolvedor Office 365 no GitHub.

Antes de executar o exemplo de código:

  • Certifique-se de ter permissões gerenciar no site. Saiba mais em Entender níveis de permissão.

  • Registre o suplemento em um site do SharePoint usando AppRegNew.aspx:

    1. Navegue até appregnew.aspx em seu site do SharePoint. Por exemplo, se você quiser usar o suplemento no site contoso.sharepoint.com, navegue até http://contoso.sharepoint.com/_layouts/15/appregnew.aspx.

    2. Escolha Gerar para gerar uma nova ID do cliente.

    3. Escolha Gerar para gerar um novo Segredo do Cliente.

    4. Insira um título para o seu suplemento no Título.

    5. No Domínio de Suplemento, insira a URL do suplemento hospedado pelo provedor. Por exemplo, insira localhost.

    6. No URI de redirecionamento, insira a URL do suplemento hospedado pelo provedor. O SharePoint redirecionará seu suplemento para essa URL depois que a autorização e o consentimento forem concedidos. Por exemplo, insira https://localhost:44363/Home/Callback. Você pode obter o nome do domínio e o número da porta da propriedade URL SSL no projeto Core.DynamicPermissionsWeb no Visual Studio.

    7. Escolha Criar.

  • Copie a ID do Cliente e o Segredo do Cliente no elemento appSettings no Core.DynamicPermissionsWeb\web.config.

Usando o suplemento Core.DynamicPermissions

Ao executar o exemplo de código:

  1. Em Conectar-se a Office 365, insira a URL do site do SharePoint no qual você registrou seu suplemento e escolha Conectar. Por exemplo, digite https://contoso.sharepoint.com.

  2. Faça logon em seu site do Office 365.

  3. Se você for solicitado a conceder consentimento às permissões que o suplemento está solicitando, escolha Confiar nele. Observe que você é redirecionado para a página /_layouts/15/OAuthAuthorize.aspx.

    Observação

    Seu usuário deve ter permissões de Gerenciar para conceder consentimento às permissões que o suplemento está solicitando. Você pode saber mais no fluxo OAuth do Código de Autorização para Suplementos do SharePoint.

  4. Em Conectado com êxito à Contoso, insira o nome de uma nova lista para criar e, em seguida, escolha Criar Lista.

  5. Verifique se Listas na Contoso, que mostra todas as listas que pertencem ao site da Contoso, mostram sua nova lista.

Ao escolher Conectar-seao Office 365, conecte-se em Controllers\HomeController.cs, que chama TokenRepository.Connect . A URL inserida pelo usuário no Connect to Office 365 é passada para TokenRepository.Connect como hostUrl.

Observação

The code in this article is provided as-is, without warranty of any kind, either express or implied, including any implied warranties of fitness for a particular purpose, merchantability, or non-infringement.

 public ActionResult Connect(string hostUrl)
        {
            TokenRepository repository = new TokenRepository(Request, Response);
            repository.Connect(hostUrl);
            return View();            
        }

TokenRepository.Connect chama TokenHelper.GetAuthorizationUrl . TokenHelper.GetAuthorizationUrl retorna a URL de redirecionamento para OAuthAuthorize.aspx usando o hostUrl e as permissões desejadas no recurso do SharePoint. OAuthAuthorize.aspx é usado para autorizar usuários usando OAuth. Quando redirecionado para OAuthAuthorize.aspx, o usuário deve entrar no Office 365 e, em seguida, consentir com as permissões que o suplemento está solicitando ou confiar no suplemento. A permissão desejada no recurso do SharePoint é Web.Manage . Após a autorização do usuário, o exemplo de código cria listas no site do SharePoint. Para criar listas em um site do SharePoint, os usuários devem ter permissões Web.Manage .

Observação

TokenHelper.GetAuthorizationUrl retorna uma URL do formulário https://contoso.sharepoint.com/_layouts/15/OAuthAuthorize.aspx?IsDlg=1&client_id=<ID> do cliente&scope=Web.Manage&response_type=code, em que <a ID> do cliente é a ID do cliente do suplemento. Se o suplemento estiver registrado por meio do Painel do Vendedor, qualquer site Office 365 poderá instalar o suplemento. Se o suplemento não estiver registrado por meio do Painel do Vendedor, você deverá registrar seu suplemento usando appregnew.aspx e atualizar Core.DynamicPermissionsWeb\web.config. Para saber mais, confiraRegistrar suplementos do SharePoint 2013.

 public void Connect(string hostUrl)
        {
            if (!IsConnectedToO365)
            {
                HttpCookie spHostUrlCookie = new HttpCookie("SPHostUrl");
                spHostUrlCookie.Value = hostUrl;
                spHostUrlCookie.Expires = DateTime.Now.AddYears(5);
                _response.Cookies.Add(spHostUrlCookie);
                _response.Redirect(TokenHelper.GetAuthorizationUrl(hostUrl, "Web.Manage"));
            }
        }

Após a autorização, o suplemento é redirecionado para Callback em Controllers\HomeController.cs, que é o URI de redirecionamento especificado no appregnew.aspx. TokenHelper passa o código de autorização, código , para Callback . Para conceder o token de acesso descrito posteriormente neste artigo, o código de autorização, código , deve ser retornado ao Retorno de Chamada . O retorno de chamada chama TokenRepository.Callback .

 public ActionResult Callback(string code)
        {
            TokenRepository repository = new TokenRepository(Request, Response);
            repository.Callback(code);
            return RedirectToAction("Index");
        }

TokenRepository.Callback chama TokenCache.UpdateCacheWithCode , que usa TokenHelper.GetAccessToken para obter um token de acesso OAuth com base no código de autorização, código .

public void Callback(string code)
        {
            HttpCookie spHostUrlCookie = _request.Cookies["SPHostUrl"];
            if (null != spHostUrlCookie)
            {
                Uri sharePointSiteUrl = new Uri(spHostUrlCookie.Value);
                TokenCache.UpdateCacheWithCode(_request, _response, sharePointSiteUrl);
            }
        }
 public static void UpdateCacheWithCode(HttpRequestBase request, HttpResponseBase response, Uri targetUri)
        {
            string refreshToken = TokenHelper.GetAccessToken(request.QueryString["code"], "00000003-0000-0ff1-ce00-000000000000", targetUri.Authority, TokenHelper.GetRealmFromTargetUrl(targetUri), new Uri(request.Url.GetLeftPart(UriPartial.Path))).RefreshToken;
            SetRefreshTokenCookie(response.Cookies, refreshToken);
            SetRefreshTokenCookie(request.Cookies, refreshToken);
        }

Seu suplemento agora tem o token de acesso para esse usuário e pode continuar a criar listas no site do SharePoint.

Confira também