|
WCF Basic аутентификация
|
|||
---|---|---|---|
#18+
Привет! Я делаю basic-авторизацию в WCF. Я в этом новичок и мои попытки основаны на серии статей http://leastprivilege.com/2008/01/11/http-basic-authentication-against-non-windows-accounts-in-iisasp-net-part-0-intro/ Я использую привязку webHttpBinding и HTTPS включен Главная идея - реализовать интерфейс IHttpModule следующим образом Когда пользователь отправляет запрос, модуль проверяет присутствует ли в запросе заголовок Authorization Если Authorization присутствует, модуль извлекает его значение, декодирует логин и пароль из Base64 и проверяет совпадение Если Authorization отсутствует, модуль возвращает код 401 с заголовком WWW-Authenticate Вот моя реализация модуля: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108.
И вот мой web.config Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
Я компилирую и публикую проект под IIS 7.5 на удаленном компьютере и подключаюсь к нему из Visual Studio через remote debugger, предварительно расставив брейкпойнты в Context_BeginRequest, OnEnter и OnLeave. Потом я отправляю запрос к моей WCF из браузера, используя URL. И вот что происходит: После того, как я жму в браузере Enter, срабатывает Context_BeginRequest Там я могу видеть из VS, что заголовок Authorization в запросе отсутствует Срабатывает OnEnter, где в конце концов ответу присваивается код 401 Срабатывает OnLeave, где в ответ добавляется заголовок WWW-Authenticate В браузере отображается стандартное окно запроса пароля и логина Ввожу в этом окне логин и пароль и жму ОК Срабатывает Context_BeginRequest, где я вижу, что заголовок Authorization присутствует с значением "Basic <логин и пароль в Base64>" На этот раз OnEnter не срабатывает Выполнение попадает в OnLeave, где значение HttpContext.Current.Response.StatusCode уже почему-то равно 401 У меня следующие вопросы: Почему OnEnter не срабатывает во второй раз, когда браузер присылает запрос с Authorization в заголовках? Вот тут сказано, что AuthenticateRequest срабатывает тогда, когда пользователь уже прошел аутентификацию. Тогда я не понимаю, почему OnEnter срабатывает в первый раз, когда никто еще не вводил никакого пароля? У меня каким-то образом включена анонимная аутентификация? Я в IIS удалил все модули аутентификации, кроме BasicAuthenticationModule! Манипуляции с <authentication mode="Forms"/> в <system.web> тоже ничего не дали Почему, когда браузер присылает запрос с Authorization, в OnLeave код ответа уже установлен 401? Что и где это устанавливает? Как мне правильно настроить мой web.config и IIS и как правильно реализовать Basic-аутентификацию? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 12:24 |
|
WCF Basic аутентификация
|
|||
---|---|---|---|
#18+
Вопрос закрыт Забыл сослаться на конфигурацию binding в конфигурировании endpoint Код: xml 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 12:32 |
|
|
start [/forum/topic.php?fid=19&fpage=5&tid=1396807]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
others: | 254ms |
total: | 351ms |
0 / 0 |