Здравствуйте люди добрые!
Есть такой замечательный сервис ecwid, а в нем есть замечательная возможность SSO (http://kb.ecwid.com/w/page/43883623/Single%20Sign-On%20API документация и примеры у них даны под разработку на php. Так вот - понадобилось мне реализовать это самое SSO для модуля dotnetnuke (asp.net) и вот что у меня получилось: исходный код на php
Код | <?php if (!$_REQUEST['logoff']) { $profile = array( 'appId' => "My cool app", 'userId' => "234", 'profile' => array( 'email' => "[email protected]", 'billingPerson' => array( 'name' => "Tester", 'companyName' => "Company Name", 'street' => "Street", 'city' => "City", 'countryCode' => "US", 'postalCode' => "10001", 'stateOrProvinceCode' => "NY" ) ) ); $message = json_encode($profile); $message = base64_encode($message); $timestamp = time(); $hmac = hash_hmac('sha1', "$message $timestamp", "A1Lu7ANIhKD6"); echo "var ecwid_sso_profile='$message $hmac $timestamp'"; } else { echo "var ecwid_sso_profile=''"; } ?>
|
мой перевод на vb.net
Код | Dim profile As New _profile profile.appId = "my_cool_test_app" profile.userId = "465" profile.profile.email = "[email protected]" profile.profile.billingPerson = New Person With { _ .city = "Москва", _ .companyName = "zoo", _ .countryCode = "US", _ .name = "jaggy_Smt", _ .postalCode = "10001", _ .stateOrProvinceCode = "NY", _ .street = "Street"} Dim timestamp As String = DateDiff("s", "01/01/1970 00:00:00", Now()).ToString Dim message As String = profile.ToJson
' до этого момента всё работает правильно!
message = Convert.ToBase64String(Encoding.Unicode.GetBytes(message))
Dim SSO_Secret As String = "A1Lu7ANIhKD6" Dim myhmacsha1 As New HMACSHA1(Encoding.Unicode.GetBytes(SSO_Secret)) Dim hashValue As Byte() = myhmacsha1.ComputeHash(Encoding.Unicode.GetBytes(message + " " + timestamp))
Dim hmac As String = Convert.ToBase64String(hashValue) Dim ecwid_sso_profile As String = message + " " + hmac + " " + timestamp SSO_out.Text = ecwid_sso_profile
|
всё ломается видимо на попытке привети строку к кодировке base64 я пробовал менять кодировку Encoding.Unicode.GetBytes на Encoding.utf8.GetBytes но это не помогло.
Помогите пожалуйста с переводом! |