Arquivo da categoria: Tips

Single Sign On utilizando Apache e Azure AD

Olá SharePointers,

Recentemente eu compartilhei no Github (https://github.com/RARomano/SSO-Apache-Azure) um repositório que mostra como fazer single sign on utilizando Azure AD, Apache e Open ID.

Utilizarei esse artigo para explicar um pouco mais sobre o conceito utilizado.

Open ID Connect

É um protocolo criado com base no OAuth para permitir que usuários se conectem, com segurança, à aplicações web.

Veja mais detalhes do fluxo de autenticação, na imagem abaixo:

Single Sign On

SSO é um conceito bastante comum em aplicações, consiste em utilizar somente um login para se autenticar em diversas aplicações diferentes. No nosso cenário, utilizaremos o login do Azure AD para se autenticar em aplicações customizadas.

Entretanto, como é um conceito comum e cada vez mais desejado, é normal encontrarmos em cada aplicação os códigos/parâmetros que permitem esse tipo de integração.

Alguns links falando sobre SSO, com Azure AD:

Em um cenário corporativo, onde hospedamos várias aplicações distintas, é muito mais interessante termos essas configurações em um só lugar, centralizado e tirar essa responsabilidade das aplicações.

Apache

Apache é um servidor web, livre e disponível para vários sistemas operacionais, inclusive o windows. Segundo estatísticas, ele possui um domínio de cerca 60% do mercado. (https://news.netcraft.com/archives/2016/02/22/february-2016-web-server-survey.html)

Pensando nisso, resolvi utilizar o Apache nesse artigo.

Para realizar a autenticação, utilizei esse módulo do apache mod_auth_openidc (https://github.com/pingidentity/mod_auth_openidc).

Docker

Outra coisa que utilizei no meu exemplo foi o Docker, visando portabilidade e escalabilidade dos meus testes, por exemplo: instanciar 2 servidores apache distintos e testar se ao autenticar em uma aplicação de um servidor a outra também estaria autenticada.

Resultados Obtidos

  • Autenticação em aplicações distintas no mesmo servidor
  • Autenticação em aplicações em servidores diferentes
  • Ao autenticar em uma aplicação customizada, você não precisará se autenticar novamente para utilizar outros serviços da Microsoft, como o e-mail por exemplo
  • Ao se autenticar em outro serviço da Microsoft primeiro e depois acessar uma aplicação, você não precisará se autenticar novamente.

Eu, particularmente, tenho gostado bastante de testar esses cenários de interoperabilidade. Tenho buscado, cada vez mais, utilizar essas ferramentas para desenvolver os projetos em que atuo e tenho me surpreendido bastante com o resultado.

Office 365 Development Program

Olá SharePointers,

A Microsoft está investindo pesado em adoção de suas plataformas e quem ganha com isso somos nós. 

Durante o Build, a Microsoft anunciou o Office 365 Development Program para desenvolvedores que trabalham com Office 365, SharePoint, Office Client ou qualquer coisa relacionado ao Office.

Entrando nesse programa GRATUITO a Microsoft dará 1 ANO de uma tenant Office 365 Developer na faixa!

É ou não é uma vantagem interessante? Não percam tempo! Cadastrem-se!!!!

 

TimerJob – Como controlar a barra de progresso?

Olá SharePointers,

Já postei algumas vezes sobre TimerJobs nesse blog (posts Regular TimerJob e Work Item TimerJobs e Criando Custom Timer Jobs no SharePoint) entretanto, existe um mecanismo muito pouco utilizado que serve de barra de progresso para a execução do seu TimerJob.

Para fazer esse controle, utilizarei o mesmo template criado no post Criando Custom Timer Jobs no SharePoint e só adicionarei os controles necessários.

Na documentação do MSDN, vemos que a classe SPJobDefinition expõe um método para essa operação SPJobDefinition.UpdateProgress. Dessa forma, só precisamos chamá-lo passando um número até 100 que indica o percentual de progresso.

O que nos resta é gerar um cálculo para identificar o progresso atual. Isso é mais fácil né?

Abaixo um exemplo:

public override void Execute(Guid contentDbId) { int[] collection = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int count = 0; foreach (var item in collection) { Thread.Sleep(5000); count++; this.UpdateProgress((count * 100) / collection.Length); } }

 

Após fazer o deploy, e executar o TimerJob, é possível acompanhar sua execução na URL http://URL_DA_CENTRAL_ADMIN/_admin/ServiceRunningJobs.aspx.

Você deverá ver algo como os prints abaixo:

 

image

 

image

 

URL para fazer o download da solução utilizada nesse exemplo: http://1drv.ms/1vVYIJ9

 

Abraços!

Troubleshooting SharePoint/Office365: Sideloading of apps is not enabled on this site

Olá SharePointers,
Estava desenvolvendo uma SharePoint Hosted app para o Office 365 e, para minha surpresa, apareceu o erro abaixo.
Esse erro acontecia quando quando tentava fazer o deploy via Visual Studio.

 

Para resolver esse erro, basta rodar o script que está disponível nesse link: http://1drv.ms/1qDs0oy

 

Referência:

http://blogs.msdn.com/b/officeapps/archive/2013/12/10/enable-app-sideloading-in-your-non-developer-site-collection.aspx

Abraços! 😀

Como criar uma “Metadata Property” no Search e utilizá-la nas buscas

 

Olá SharePointers,

 

Hoje vou mostrar como criar uma “Metadata Property” e permitir que ela seja utilizadas nas buscas sem precisar especificar a propriedade completa, exemplo: Aniversario=01/01/2000

 

Abrir a Central Administration e clicar em Manage Service Applications.

image

Escolher o Service Application correspondente ao Search.

image

No lado esquerdo, clique em Metadata Properties (dentro da guia Queries and Results).

image

Clique em New Managed Property.

image

Preencha as informações referentes a propriedade (Property Name, Description e Type). Clique no botão Add Mapping e escolha a propriedade referente a esse item. Clique em OK.

image 

Na guia Crawling, clique em Content Sources.

image

Escolha o Content Source que indexa o site em questão e clique em Start full crawl e aguarde o processo concluir.

image

No lado esquerdo, clique em Metadata Properties (dentro da guia Queries and Results).

image

Clique em Crawled Properties.

image

Escolha a propriedade criada nos passos anteriores e clique em Edit/Map Property.

image

Clique em Add Mapping e adicione ContentsHidden (Text). Marque o checkbox Include values for this property in the search index e clique em OK. (Essa etapa que fará com que a propriedade seja disponível das queries sem precisar especificar o nome dela)

image

 

Após a execução do último passo aguarde alguns segundos ou faça o crawl novamente.

 

Abraços 😀

Object cache: The super user account utilized by the cache is not configured.

Olá SharePointers,

 

Hoje a dica é para resolver um problema muito comum (aliás, geralmente é uma falta de configuração): object cache não configurado;

 

Como identificar?

No event viewer do servidor, aparecerá a mensagem abaixo:

Object Cache: The super user account utilized by the cache is not configured. This can increase the number of cache misses, which causes the page requests to consume unneccesary system resources.
To configure the account use the following command ‘stsadm -o setproperty -propertyname portalsuperuseraccount -propertyvalue account -url webappurl’. The account should be any account that has Full Control access to the SharePoint databases but is not an application pool account.
Additional Data:
Current default super user account: SHAREPOINTsystem

Para resolver isso, utilizem os passos desse artigo: http://technet.microsoft.com/en-us/library/ff758656(v=office.14).aspx

 

Obs: Para as web applications que estão utilizando claims, utilizem o login no formato CLAIMS (i:0#.w|domainuser).

Abraços! 😀

Quick Tip: Fazendo “Cleanup” das Listas de uma Solution – SharePoint

Olá SharePointers,

Quando estamos planejando uma solução utilizando o SharePoint, devemos nos preocupar com todos os aspectos. Isso inclui: a arquitetura da solução, que recursos utilizaremos, até o deployment da aplicação.

No processo de deployment, as boas práticas recomendam que a sua solução, ao ser desinstalada remova todos os recursos que por ela foram criadas.

Ao pensar nas unidades de armazenamento básicas do SharePoint, Listas e Bibliotecas, o “correto” seria criá-las através de List Instance List Definitions (mas isso é um assunto para outro post). Dessa forma, ao ativar a feature, as listas são automaticamente criadas no site (facilitando, E MUITO, o processo de deploy da aplicação).

Entretanto, a maior surpresa (talvez) seja o fato de que ao desativar as features, o SharePoint não remove automaticamente esses objetos criados.

Se a sua solução tem 1 ou 2 listas, talvez seja simples remover manualmente ou fazer algum código para isso. Mas imagina uma solução com 100 listas (!!). Como fazer para removê-las de forma segura e de que mesmo mudando o nome da lista no projeto, você não precise alterar NENHUMA linha de código??
“SEUS PROBLEMAS ACABARAM”!!! (rs)
Utilizando o código abaixo dentro de um Feature Receiver, no evento Feature Deactivating (Veja mais sobre Event Receivers aqui: http://rodrigoromano.net/2014/01/05/eventos-event-receivers-no-sharepoint-2013/) quando a feature for desativada, o código procurará por cada ListInstance dentro da Feature e deletará a lista.
Captura de Tela 2014-02-13 às 22.14.21
O que acharam?
Abraços 😀

QuickTip: Visual Studio e Resolução de Conflitos para List Instances

Olá SharePointers,

Essa é uma QuickTip para ajudar a salvar algumas horas no desenvolvimento de soluções para o SharePoint.

Para as pessoas, como eu, que trabalham criando customizações para o SharePoint, o Visual Studio é considerado quase nossa ferramenta diária de trabalho.

Quando começamos uma solução, geralmente planejamos as listas e bibliotecas e criamos os List Definition/Instance para cada uma que utilizaremos na solução(Walkthrough: Create a Custom Field, Content Type, List Definition, and List Instance).

Entretanto, toda vez que vamos fazer um deploy, o Visual Studio apaga todas as listas e as criam novamente, certo?! ERRADO!

Existe uma configuração no List Istance do Visual Studio que permite que você controle esse comportamento: Deployment Conflict Resolution.

imageimage

 

Por padrão, essa opção está como Automatic. Se você alterá-la para None a lista não será mais apagada e criada novamente durante deploys Smiley de boca aberta!!!

 

Aproveitando a oportunidade, aproveitem para dar uma lida no guia da Microsoft que fala sobre como extender os recursos de Package e Deploy do Visual Studio: http://msdn.microsoft.com/en-us/library/ee471434.aspx.

 

Abraços!

Regular TimerJob e Work Item TimerJobs

Olá SharePointers,

Com o natal chegando, festas, fim de ano e toda a correria já esperada do final de ano, vou fazer provavelmente o meu último post desse ano.

Em uma discussão no grupo de SharePointers dentro do Facebook (https://www.facebook.com/groups/sharepointers/) uma das sugestões – de um amigo Reynaldo Souza – foi falar sobre a diferença de Regular Timer Job e Work Item Timer Jobs.

Já fiz, no passado, um post falando sobre TimerJobs Criando Custom Timer Jobs no SharePoint.

Resumidamente, TimerJob é uma forma de realizar atividades em “lote”, de forma agendada, baseada em alguma recorrência. Como o processo não roda através do IIS (w3wp), não existe os problemas comuns de Timeout de operações que temos ao executar operações longas.

A grande diferença do Work Item TimerJob em relação ao TimerJob normal, é que elé já contém uma infraestrutura prevista para o processamento de itens em lote, inclusive inclui até mesmo a funcionalidade de Pausa durante o processamento (Fantástico!).

 

O que muita gente não sabe é que esse tipo de TimerJob já estava presente desde a versão 2007 do SharePoint (WSS 3.0) e ele é a maneira “correta” do SharePoint processar itens em lote sem gerar trabalhos adicionais para os desenvolvedores… (Adoro essa plataforma!)

Sendo assim, o foco do desenvolvedor é apenas processar o item e não gerar um mecanismo de fila de processamento, com listas adicionais e seja lá mais for necessário para a sua regra de negócio.

Abaixo, segue alguma referências de blogs que dão mais detalhes sobre o assunto e até mostram como criar e utilizar esse recurso:

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spworkitemjobdefinition.aspx

http://blogs.technet.com/b/stefan_gossner/archive/2011/11/17/sharepoint-variations-the-complete-guide-part-4-timer-jobs.aspx

http://blog.mastykarz.nl/processing-items-work-item-timer-jobs-sharepoint-2010/

 

Pessoal, feliz natal e um ótimo ano novo a todos! Smiley de boca aberta

Abraços!

Troubleshooting: Trial period for this product is about to expire

Olá SharePointers,

Hoje vou postar uma dica para resolver um problema bem diferente: Trial period for this product is about to expire.

image

Antes de mais nada, vou explicar o cenário:

Primeiro foi instalado o SharePoint 2010 Standard em 4 servidores (2 WFEs e 2 Apps). Após a instalação, foi necessário converter a licença para Enterprise.

Com isso em mente,  abri a Central Admin, fui em Upgrade and Migration e cliquei no Link Convert farm license type.

 

image

Na tela que abriu, digitei o serial do Enterprise cliquei em OK e fiquei “torcendo” para um “SUCCESS”…. Mas, infelizmente, não foi isso o que aconteceu. Deu erro.

image

Após várias tentativas (de todas as opções possíveis de troubleshootings disponíveis sobre o assunto) sem sucesso, resolvi tirar todos os servidores da Farm e criar novamente.

A grande surpresa é que o problema da conversão da licença foi resolvido, MAAAS apareceu a mensagem de erro abaixo:

image

Após algumas pesquisas, encontrei uma informação que foi muito revelante na hora de tentar uma abordagem para resolver o problema: como deu erro no processo de conversão da licença, alguma chave no REGEDIT poderia estar com as permissões erradas e o SharePoint não consegue acessar para validar a licença da FARM.

Sendo assim, para resolver o problema, a solução foi rodar o comando abaixo em cada Front End da FARM:

psconfig.exe -cmd secureresources

Para mais informações sobre o comando, veja: http://technet.microsoft.com/pt-br/library/cc263093%28v=office.14%29.aspx

 

E voilà! Tudo resolvido Alegre

 

Abraços!