Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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