<div dir="ltr">Hi Ivan, <div><br></div><div>Awesome ! your explanation is very clear and helpful.</div><div><br></div><div>Thanks !!</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El sáb., 29 feb. 2020 a las 10:11, Ivan Kanakarakis (<<a href="mailto:ivan.kanak@gmail.com">ivan.kanak@gmail.com</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello Gustavo,<br>
<br>
On Thu, 27 Feb 2020 at 14:27, Gustavo Duarte <<a href="mailto:gus.duarte@gmail.com" target="_blank">gus.duarte@gmail.com</a>> wrote:<br>
><br>
> Hi Ivan, thanks you for your time.<br>
><br>
> What's the best way to implement the backend to handle SAML1 or custom API ? Through a Plugin ?<br>
<br>
<br>
You can do this with a "plugin", but you should think this more as an<br>
_adapter_. What happens is that Satosa receives a request through one<br>
of its frontends. The frontends implement the IdP/OP-like interfaces.<br>
The frontends extract the useful information and translate the request<br>
to an internal representation. This representation is then translated<br>
back to the outgoing protocol through a backend. The backend gets the<br>
internal data and map it to the right constructs of the outgoing<br>
protocol. In your case that would be SAML1 or the custom-API you want<br>
to build. So, effectively, the backends are SPs/RPs/clients that talk<br>
to an IdP/OP/server.<br>
The IdP/OP/server will authenticate the user, and then reply by<br>
sending a response. The response is again handled by the backend, but<br>
this time, the backend will extract the useful information and<br>
translate the response to the internal representation. The data are<br>
then handed over to the frontend to form the response in the original<br>
protocol (SAML2 in your case).<br>
So, you can see that the backend is an adapter between the outgoing<br>
protocol (SAML1/custom-API) and the internal representation.<br>
<br>
With this in mind, you can start building such a backend. Look at the<br>
base class for the backend, here:<br>
<a href="https://github.com/IdentityPython/SATOSA/blob/master/src/satosa/backends/base.py" rel="noreferrer" target="_blank">https://github.com/IdentityPython/SATOSA/blob/master/src/satosa/backends/base.py</a><br>
This is the API you have to fulfil; plus one more function that will<br>
handle the response and is registered along with a route as a callback<br>
in register_endpoints().<br>
You can also see the internal data structure here:<br>
<a href="https://github.com/IdentityPython/SATOSA/blob/master/src/satosa/internal.py#L107" rel="noreferrer" target="_blank">https://github.com/IdentityPython/SATOSA/blob/master/src/satosa/internal.py#L107</a><br>
<br>
Have a look at the existing backends, and whether a SAML1 SP library<br>
is already out there. I think that will get you started.<br>
<br>
<br>
Cheers,<br>
<br>
<br>
-- <br>
Ivan c00kiemon5ter Kanakarakis  >:3<br>
</blockquote></div>