Nome desaparece após seleção no Seletor de Pessoas com o provedor de declarações personalizadas no SharePoint 2010
Artigo original publicado em 28 de junho de 2011, terça-feira
Recentemente, testemunhei um problema que provou ser bastante difícil de rastrear; então eu pensei em compartilhar o problema e sua solução. Nesse caso, um provedor de declarações personalizadas tinha sido desenvolvido e ele estava sendo usado como o provedor de declarações padrão para o SPTrustedIdentityTokenIssuer, conforme descrito aqui: https://blogs.technet.com/b/speschka/archive/2010/04/28/how-to-override-the-default-name-resolution-and-claims-provider-in-sharepoint-2010.aspx. Ele pode parecer estar funcionando em alguns casos, você pode procurar algo, ele mostra a lista de correspondências, você seleciona um e clica no botão OK. Em alguns casos, tudo funciona bem - a caixa de diálogo desaparece e você vê o nome resolvido no tipo sendo controlado. Além disso, você também pode definir um ponto de interrupção no método FillResolve e passar por ele.
No entanto, em alguns casos, você visualiza este comportamento:
- A caixa de diálogo do seletor de pessoas fecha
- O tipo em controle está em branco - nada (resolvido ou não) é exibido
- Quando você define um ponto de interrupção no FillResolve, ele nunca é atingido
- Quando você observa os logs do ULS, não há erros
Nesse caso, o que eu finalmente determinei que estava acontecendo é que o provedor de declarações personalizadas estava adicionando um tipo de declaração que não tinha um mapeamento correspondente no SPTrustedIdentityTokenIssuer. Portanto, por exemplo, ele estava criando uma declaração, onde o tipo de declaração era https://schemas.steve.com/foo, mas a lista de mapeamentos de declarações do SPTrustedIdentityTokenIssuer não tinha um mapeamento para https://schemas.steve.com/foo (para obter um exemplo dos mapeamentos de declarações e como eles são criados, consulte https://blogs.technet.com/b/speschka/archive/2010/02/17/creating-both-an-identity-and-role-caem-for-a-sharepoint-2010-clames-ao-application.aspx). Em vez de adicionar uma declaração que o SharePoint sabe que não está mapeada, em algum lugar no pipeline ela se perde e deixa você com uma tela em branco e sem mensagem de erro. É por isso que pode levar muito tempo para rastreá-la.
Para este problema específico, eliminamos o SPTrustedIdentityTokenIssuer e o recriamos, mas adicionando um novo mapeamento para o tipo de declaração que tem desaparecido do seletor de pessoas. Executamos o código novamente e tudo "simplesmente funcionou" imediatamente, confirmando o problema e a solução.
Esta é uma postagem de blog traduzida. Consulte o artigo original em Name Disappears After Selecting in People Picker with Custom Claims Provider in SharePoint 2010