Декодировать строку SAML 2.0 64Base

Я разрабатываю систему единого входа SAML 2.0. У меня возникла проблема с декодированием строки 64Base, чтобы преобразовать ее в xml, а затем прочитать содержимое позже.

Ниже приведен код, который я использовал:

Protected Function uf_getIDFromSAMLRequest(ByVal as_samlRequest As String) As String
        Dim ms As New MemoryStream(Convert.FromBase64String(as_samlRequest))
        Dim decompress As New DeflateStream(ms, CompressionMode.Decompress)
        Dim xmlMessageBytes As Byte() = New Byte() {}
        Dim m1 As New MemoryStream(xmlMessageBytes)
        decompress.CopyTo(m1)
        Dim document As New XmlDocument() With { _
         .PreserveWhitespace = True _
        }
        document.LoadXml(Encoding.UTF8.GetString(xmlMessageBytes))
        Return document.DocumentElement.Attributes("ID").InnerXml.ToString()
End Function

Ниже приведен запрос saml, зашифрованный строкой base64:

PHNhbWxwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiBJRD0iX2JlYzQyNGZhNTEwMzQyODkwOWEzMGZmMWUzMTE2ODMyN2Y3OTQ3NDk4NCIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMDctMTItMTBUMTE6Mzk6MzRaIiBGb3JjZUF1dGhuPSJmYWxzZSIgSXNQYXNzaXZlPSJmYWxzZSIgUHJvdG9jb2xCaW5kaW5nPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1QT1NUIiBBc3NlcnRpb25Db25zdW1lclNlcnZpY2VVUkw9Imh0dHBzOi8vaWZpbS1xYS5wcnVkZW50aWFsLmNvbS9zcHMvaW50LW1pY3JvbnN5c3RlbXMvc2FtbDIwL2xvZ2luIj4NCiAgICA8c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI+DQogICAgICAgIHVybjptYWNlOmZlaWRlLm5vOnNlcnZpY2VzOm5vLmZlaWRlLm1vb2RsZQ0KICAgIDwvc2FtbDpJc3N1ZXI+DQogICAgPHNhbWxwOk5hbWVJRFBvbGljeSB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiBGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnBlcnNpc3RlbnQiIFNQTmFtZVF1YWxpZmllcj0ibW9vZGxlLmJyaWRnZS5mZWlkZS5ubyIgQWxsb3dDcmVhdGU9InRydWUiIC8+DQogICAgPHNhbWxwOlJlcXVlc3RlZEF1dGhuQ29udGV4dCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiBDb21wYXJpc29uPSJleGFjdCI+DQogICAgICAgIDxzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPg0KICAgICAgICAgICAgdXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmRQcm90ZWN0ZWRUcmFuc3BvcnQNCiAgICAgICAgPC9zYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmPg0KICAgIDwvc2FtbHA6UmVxdWVzdGVkQXV0aG5Db250ZXh0Pg0KPC9zYW1scDpBdXRoblJlcXVlc3Q+

Я получил исключение: «При декодировании обнаружены неверные данные». при использовании приведенного выше кода.

При тестировании этого зашифрованного saml-запроса с помощью отладчика SAML 2.0 он должен читать в виде:

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="_bec424fa5103428909a30ff1e31168327f79474984" Version="2.0" IssueInstant="2007-12-10T11:39:34Z" ForceAuthn="false" IsPassive="false" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="https://ifim-qa.prudential.com/sps/int-micronsystems/saml20/login">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
        urn:mace:feide.no:services:no.feide.moodle
    </saml:Issuer>
    <samlp:NameIDPolicy xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" SPNameQualifier="moodle.bridge.feide.no" AllowCreate="true" />
    <samlp:RequestedAuthnContext xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Comparison="exact">
        <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
            urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
        </saml:AuthnContextClassRef>
    </samlp:RequestedAuthnContext>
</samlp:AuthnRequest>

Спасибо за помощь в продвижении!


person jeff    schedule 06.06.2011    source источник
comment
Я получил исключение Обнаружены недопустимые данные при декодировании. в использовании функции.   -  person jeff    schedule 07.06.2011


Ответы (1)


Хорошо, я заработал, используя следующий код:

Protected Function uf_getIDFromSAMLRequest(ByVal as_samlRequest As String) As String
        Dim xmlMessageBytes As Byte() = Convert.FromBase64String(as_samlRequest)
        Dim document As New XmlDocument() With { _
         .PreserveWhitespace = True _
        }
        document.LoadXml(Encoding.UTF8.GetString(xmlMessageBytes))
        Return document.DocumentElement.Attributes("ID").InnerXml.ToString()
End Function
person jeff    schedule 07.06.2011