Я искал решение, но не могу его найти.Как получить токен SAML2 в PHP для получения маркера OAuth из WSO2 APIM
Этот вопрос напрямую связан с:
- https://docs.wso2.com/display/AM200/Exchanging+SAML2+Bearer+Tokens+with+OAuth2+-+SAML+Extension+Grant+Type
- https://github.com/simplesamlphp/simplesamlphp/issues/220
Вот сценарий, я хочу, чтобы выполнить:
- аутентификации в СП с использованием SAML2. Закодировано в PHP с помощью SimpleSamlPhp.
- получить маркер OAuth с конечной точки API mgr, используя утверждение SAML2. (с использованием URL http://api.gateway/token)
- вызывать API через шлюз API mgr, используя токен OAuth.
Я застрял в инструкции: получите токен утверждения SAML2. Где я могу найти этот токен? В SimpleSamlPhp я могу получить атрибуты пользователя или их идентификатор, но я не могу найти никаких утверждений.
Я взломал SSP, чтобы получить последнее утверждение, но не знаю, что с ним делать. Я ожидал единственное значение (например, токен), но это сложная структура. И одна из вышеперечисленных ссылок говорит, что я не должен обращаться к ней!
Что я могу отправить, закодированный, на токен?
EDIT: добавление некоторых образцов. Мой утверждают XML (под редакцией):
<?xml version="1.0" encoding="UTF-8"?>
<saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" ID="okdjgbm...jdbh" IssueInstant="2016-11-28T09:49:45.808Z" Version="2.0">
<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://g...p.com:9443/samlsso</saml2:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#okd...kejdbh">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>RrGcR...cktFuH0=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>b91j/k...Z7d4=</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIICNT...Wq8uHSCo=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<saml2:Subject>
<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">[email protected]</saml2:NameID>
<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml2:SubjectConfirmationData InResponseTo="_80258326a1...cd4bbd" NotOnOrAfter="2016-11-28T09:54:45.807Z" Recipient="http://1.2.3.4/simplesamlphp/www/module.php/saml/sp/saml2-acs.php/wso2-sp" />
</saml2:SubjectConfirmation>
<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml2:SubjectConfirmationData InResponseTo="_8025832...d4bbd" NotOnOrAfter="2016-11-28T09:54:45.807Z" Recipient="https://my.wso2.apim:8243/token" />
</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions NotBefore="2016-11-28T09:49:45.808Z" NotOnOrAfter="2016-11-28T09:54:45.807Z">
<saml2:AudienceRestriction>
<saml2:Audience>mytestapp</saml2:Audience>
<saml2:Audience>https://my.wso2.apim:8243/token</saml2:Audience>
</saml2:AudienceRestriction>
</saml2:Conditions>
<saml2:AuthnStatement AuthnInstant="2016-11-28T09:49:45.815Z" SessionIndex="1f5192...b591">
<saml2:AuthnContext>
<saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml2:AuthnContextClassRef>
</saml2:AuthnContext>
</saml2:AuthnStatement>
<saml2:AttributeStatement />
</saml2:Assertion>
закодировать в base64-URL-кодированного XML:
PHNhbWwyO...dGlvbj4,
, используя метод, скопированный из другого SO размещать
function base64_url_encode($input) {
return strtr(base64_encode($input), '+/=', '-_,');
}
Речь идет о 20 строк длиной (и да, в конце есть запятая).
Это не работает, я получить результат JSON
{"error":"invalid_grant","error_description":"Provided Authorization Grant is invalid."}
В следах:
TID: [0] [AM] [2016-11-29 11:04:50,297] DEBUG {org.wso2.carbon.identity.oauth2.token.handlers.grant.saml.SAML2BearerGrantHandler} - SAML Token Issuer verification failed or Issuer not registered {org.wso2.carbon.identity.oauth2.token.handlers.grant.saml.SAML2BearerGrantHandler}
TID: [0] [AM] [2016-11-29 11:04:50,298] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - Invalid Grant provided by the client, id=fkJa...Ohoa, user-name=null to application=myapp-subscriber_test_PRODUCTION {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer}
TID: [0] [AM] [2016-11-29 11:04:50,300] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - OAuth-Error-Code=invalid_grant client-id=fkJa...hoa grant-type=urn:ietf:params:oauth:grant-type:saml2-bearer scope=PRODUCTION {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer}
Я прошу вокруг конфигураторах системы. Кажется, что в ссылке между IDS, APIM и OAuth есть кое-что отсутствует. (я искал это в Google и пришел с обменом stackoverflow, чтобы проверить идентификатор эмитента в этом утверждении, который я сделал, но я не могу идентифицировать что-то не так)
Спасибо за помощь, я вернусь, если У меня есть что-то новое. Если не считать, конечно, что-то очевидное!
может быть связано с http://stackoverflow.com/questions/19866021/how-to-get-saml2-bearer-assertion-profile-for-oauth-within-wso2-api-manager-to-w?rq = 1 – JRobinss
может быть связано с http://stackoverflow.com/questions/34738716/wso2-saml2bearergranthandler-saml-token-issuer-verification-failed-or-issuer-not – JRobinss