Получение 401/403 в приложении High Trust для SharePoint 2013
-
10-12-2019 - |
Вопрос
У меня есть это CloudShare Edurgions , состоящий на 3 машинах:
- .
- One for SharePoint 2013 (это то, где я разработан с установленным vs2012)
- другой для SQL Server 2012
- и другой для Active Directory
Я пытаюсь создать базовое приложение High Trust для SharePoint 2013, используя протокол сервера к серверу.
Я следовал нескольким направляющим:
- .
- http://msdn.microsoft.com/en-us/library/fp179901.aspxctionc/ A>
- http://blogs.msdn.com/b/shariq/archive/2013/05/07/how-to-toms-for-sharepoint-2013 - Устранение неполадок - Tips.aspx
- http://ranvijaysingh.blogspot.com.ar /2013/04/develop-provider-hosted-app-on-single.html
Когда я запускаю проект (код шаблона по умолчанию) от VS и доверять приложению, я получаю исключение в следующей строке:
.Uri hostWeb = new Uri(Request.QueryString["SPHostUrl"]); using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity)) { clientContext.Load(clientContext.Web, web => web.Title); clientContext.ExecuteQuery(); // throws exception Response.Write(clientContext.Web.Title); }
по умолчанию .aspx.cs
Исключение может быть любое из следующих действий:
Удаленный сервер вернул ошибку: (403) Запрещено.
Удаленный сервер вернул ошибку: (401) несанкционировано.
Я попробовал несколько советов по устранению неполадок без удачи. Я не эксперт SP2013, поэтому любая помощь будет оценена.
Спасибо
<Сильное> Обновление
Вот записи журнала ULS, связанные с запросом: http://pastie.org/pastes/8395956/text
Решение
Для простоты я буду указывать очевидным!
PS. не синхронизированы, доступ может быть отклонен, когда пользователь должен быть предоставленным доступом для данного ресурса. Поэтому убедитесь, что Членство в группе синхронизированы с помощью службы профиля пользователя Приложение.пользователя не аутентифицирован, а ресурс требует аутентификации
Это говорит мне, что есть что-то не так, продолжается рукой, встряхивая рукой (ваш сертификат не отправлен или не прав), так как его продукт Microsoft лучше всего посмотреть на MSDN.
Чтобы сделать его понятно, пожалуйста, прочитайте это:
Следующий шаг не является обязательным. Тем не менее, мы рекомендуем вам развить и тест с включенными HTTPS. Отключение HTTPS может вызвать вы разработчик пропустить определенные проблемы при создании приложения, которое произойдет Во время развертывания производства, где требуется HTTPS.
Теперь вы читаете заметку, прочитайте проблему, что вы имеете!
OAUTH Теперь требует SharePoint для запуска HTTPS, не только для вашего обслуживания Но также для SharePoint 2013. Вы получите 403 (запрещенное) сообщение При попытке позвонить в SharePoint с помощью теста Сертификат.
На компьютере, где у вас установлен SharePoint 2013, вы можете повернуть вне требования HTTPS во время разработки, используя следующие Командлеты Windows PowerShell.
Так что это ваша проблема прямо там! Чтобы обойти это, в то время как развивается:
Это в PowerShell для тестирования / разработки:
.$serviceConfig = Get-SPSecurityTokenServiceConfig $serviceConfig.AllowOAuthOverHttp = $true $serviceConfig.Update()
После завершения вернуть его обратно к тому, как это было!
.$serviceConfig = Get-SPSecurityTokenServiceConfig $serviceConfig.AllowOAuthOverHttp = $false $serviceConfig.Update()
Теперь я бы также хотел бы отметить:
в приложении с высоким доверием, нет токена контекста, даже если вы используете edredirect.aspx файл. Токен контекста специфичен для конфигураций Это использует Windows Azure Access Control Service (ACS). Однако АН Токен доступа все еще требуется. Если вы используете высокое доверие Конфигурация, ваше веб-приложение должно подтвердить подлинность пользователя в так же, как SharePoint 2013 делает (то есть приложение Отвечает за создание пользовательской части токена доступа).
Вы используете класс Toknheelper, чтобы получить клиентКонтекст?
.using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity)) { clientContext.Load(clientContext.Web, web => web.Title); clientContext.ExecuteQuery(); Response.Write(clientContext.Web.Title); }
Кроме того, что именно вы пытаетесь сделать так, как вам может понадобиться больше разрешений в зависимости от того, что вы делаете!
Чтобы получить доступ к другим свойствам, вам может потребоваться запросить разрешения на Host Web.
http://msdn.microsoft.com/en-us/library/fp179901.aspxc/f179901.aspx<< A>
Если это все еще проблема, чем ее что-то не так с GUID, выданный VS2012, то есть автоматически отправляется при нажатии F5, это установлено в Web.config на этой строке:
.<add key="IssuerId"
Измените GUID из верхнего региона в нижний регистр:
от:
.<add key="IssuerId" value="F2AE6B96-1FC0-43C6-B5D0-900117C491A4"/>
к
.<add key="IssuerId" value="f2ae6b96-1fc0-43c6-b5d0-900117c491a4"/>
Очевидно, ваш GUID будет отличаться от выше;)
Также нравится отметить, что вам нужен уникальный сертификат для каждого отдельного приложения! Также убедитесь, что GUID такой же, как GUID PowerShell, используя
Get-SPTrustedSecurityTokenIssuer
, должен быть таким же, как Web.config!http:// www .jamestsai.net / blog / post / sharepoint-avograted-app-app-401 - несанкционированная ошибка-on-clientcontextexeCuteQuery (). aspx
<Сильное> Обновление
Просто посмотрел на ваш файл журнала!
Чтобы сломать его сразу с помощью аутентификации! Какой метод вы используете? NTLM? Кербос? ECT ...
Это фундаментально знать, как у вас установить вашу ферму и аутентификацию!
Теперь здесь может быть несколько вопросов, идущих здесь по внешности ошибок! Я рекомендую прочитать по ссылкам ниже! Я настоятельно рекомендую, как только вы прочитали ссылки, которые, если все правильно в вашей настройке для запуска
New-SPTrustedSecurityTokenIssuer
Этот пример можно найти в моей последней ссылке внизу страницы! Это может решить вас проблему с частью токена и правильным рукопожатием между двумя серверами (проверяя друг друга).1) токен не отправляется из-за параметров безопасности, которые не совместимы!
Если вы используете режим претензий Windows для аутентификации пользователя и Веб-приложение настроено на использование только аутентификации Kerberos Не возвращаясь к NTLM в качестве протокола аутентификации, затем приложение Аутентификация не работает.
http://technet.microsoft.com/en-us/library/ee806870.aspx A>
Если профиль пользователя существует для пользователя и соответствующие члены группы
http://technet.microsoft.com/en-us/library/jj219806.aspx A>
Теперь это необходимо для настройки сервера на сервер для работы!
аутентификация сервера к серверу позволяет серверам, которые способны Аутентификация на сервер к серверу для доступа и запроса ресурсов из друг друга от имени пользователей. Следовательно, сервер, который работает SharePoint Server 2013 и это службы входящего запроса ресурсов Должен быть в состоянии выполнить две задачи:
для восстановления идентичности пользователя, сервер, который может выполнить Аутентификация на сервер к серверу запросы на доступ к SharePoint Ресурсы. SharePoint Server 2013 принимает претензии от входящего Токен безопасности и разрешает его к конкретному пользователю SharePoint. От По умолчанию SharePoint Server 2013 использует встроенную службу профиля пользователя Приложение для устранения идентичности.
и результат приведенного выше:
Если профиль пользователя и соответствующие члены группы для пользователя Не синхронизирован, SharePoint Server 2013 может неправильно отказать доступ до данного ресурса. Поэтому убедитесь, что членство группы являются Синхронизирован с приложением службы профиля пользователя. Для окон Претензии, приложение службы профиля пользователя импортирует четырех ключевых пользователей атрибуты ранее описанные и групповые членства.
http://technet.microsoft.com/en-us/library/jj729797.aspx A>
http://technet.microsoft.com/en-us/library/jj655400.aspx A>
Ссылка выше объясняет и демонстрирует сервер к шагам сервера для конкретных Senarios
Чтобы создать доверие между двумя серверами (создает доверие между сервером для принципала сервера.)
Следуйте этим руководству! Использование
New-SPTrustedSecurityTokenIssuer
http://technet.microsoft.com/en-us/library/jj219695.aspxc/j219695.aspxcc/ A>
Другие советы
У меня были похожие проблемы.Вместо использования ClientContext или Tokenheelper я переключился на новый SharePointContext, который вы можете прочитать здесь: http://blogs.msdn.com/b/kaevans/Archive/2013/09/24/introducing-sharepointContext-for-provider-hosted-SharePoint-Apps.aspx
После того, как я сделал этот переключатель, мои 401 и 403 проблемы исчезли.Новый SharePointContext использует базовый токельщик, поэтому убедитесь, что у вас также есть последняя версия файла TokenHelper.
Я думаю, что знаю, какова была ваша проблема, журнал сервера указывает на машину клиента / сервера, не имеет времени в синхронизации.
"SPApplicationAuthenticationModule: No valid access token exists in the Authorization header, you should see a 401 challenge as a response to this request."
"SPSecurityTokenExtensions: Not Valid Before:10/11/2013 21:15:38, Valid To:09/06/2015 07:55:38."
.
Я столкнулся с аналогичной ошибкой несколько дней назад, и разрешение было иметь в синхронизации сервера и клиентской машины.
Foundation Application Authentication ajezq High SPApplicationAuthenticationModule:
Error authenticating request, Error details:
Header: 3000002;reason="The access token has expired.
It's valid from '4/29/2015 2:50:44 PM' and to '4/30/2015 2:50:44 AM'.";
category="invalid_client", Body: {"error_description":"Invalid JWT token. The token is not yet valid.
Current time is 4\/29\/2015 10:44:25 AM and the token is Valid from 4\/29\/2015 2:50:44 PM."}
.