Имя: Пароль:
1C
1С v8
HTTP Аутентификация
0 korableg
 
16.11.14
14:56
Люди, подскажите пожалуйста, кто-нибудь делал HTTP аутентификацию на 1С. Меня интересует поле cnonce, как его расчитывать?
1 oleg_km
 
16.11.14
19:06
Вроде его клиент назначает от балды:

http://en.wikipedia.org/wiki/Digest_access_authentication
2 Woldemar22LR
 
16.11.14
20:03
подпишусь пожалуй на тему.
3 Serginio1
 
16.11.14
20:13
4 Serginio1
 
16.11.14
21:26
5 oleg_km
 
16.11.14
21:42
(4) Ну да, примерно как я и написал:

cnonce - уникальная строка, посылаемая браузером на сервер
6 Serginio1
 
16.11.14
21:54
(5) Да

https://ru.wikipedia.org/wiki/Nonce
Вот расчет

string realm = ConfigurationSettings.AppSettings["HTTPDigest.Components.AuthDigest_Realm"];


         // a)
         // A1 = unq(username-value) ":" unq(realm-value) ":" passwd
         string A1 = String.Format("{0}:{1}:{2}",
                                   (string)dictAuthHeaderContents["username"],
                                   realm,
                                   password);

         // b)
         // HA1 = MD5(A1)
         string HA1 = CvtHex(A1);

         // c)
         // A2 = HTTP Method ":" digest-uri-value
         string A2 = String.Format("{0}:{1}",
                                   app.Request.HttpMethod,
                                   (string)dictAuthHeaderContents["uri"]);

         // d)
         // HA2 = MD5(A2)
         string HA2 = CvtHex(A2);

         // e)
         // GENRESPONSE = HA1 ":" nonce ":" nc ":" cnonce ":" qop ":" HA2
         string GENRESPONSE;
         if (dictAuthHeaderContents["qop"] != null)
         {
            GENRESPONSE = String.Format("{0}:{1}:{2}:{3}:{4}:{5}",
                                        HA1,
                                        (string)dictAuthHeaderContents["nonce"],
                                        (string)dictAuthHeaderContents["nc"],
                                        (string)dictAuthHeaderContents["cnonce"],
                                        (string)dictAuthHeaderContents["qop"],
                                        HA2);
         }
         else
         {
            GENRESPONSE = String.Format("{0}:{1}:{2}",
                                        HA1,
                                        (string)dictAuthHeaderContents["nonce"],
                                        HA2);
         }

         string HGENRESPONSE = CvtHex(GENRESPONSE);


         // Проверяем nonce

         bool isNonceStale = !IsValidNonce((string)dictAuthHeaderContents["nonce"]);
         app.Context.Items["staleNonce"] = isNonceStale;


         // Сверяем HGENRESPONSE с response заголовка
         // Проверяем nonce
         // если всё ok - создаём GenericPrincipal с группами юзера

         if (((string)dictAuthHeaderContents["response"] == HGENRESPONSE) && (!isNonceStale))
         {
            app.Context.User = new GenericPrincipal(new GenericIdentity(username, "HTTPDigest.Components.AuthDigest"), groups);
         }
         else
         {
            AccessDenied(app);
            return;
         }
7 Serginio1
 
16.11.14
21:55