Packages
samly
1.1.0
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.10.1
retired
0.10.0
retired
0.9.3
retired
0.9.2
retired
0.9.1
retired
0.9.0
retired
0.8.4
retired
0.8.3
retired
0.8.2
retired
0.8.1
retired
0.8.0
retired
0.7.2
retired
0.7.1
retired
0.7.0
retired
0.6.3
retired
0.6.2
retired
0.6.1
retired
0.6.0
retired
0.5.0
retired
0.4.0
retired
0.1.2
retired
SAML Single-Sign-On Authentication for Plug/Phoenix Applications
Current section
Files
Jump to
Current section
Files
lib/samly.ex
defmodule Samly do
@moduledoc """
Elixir library used to enable SAML SP SSO to a Phoenix/Plug based application.
"""
alias Plug.Conn
alias Samly.{Assertion, State}
@doc """
Returns authenticated user SAML Assertion.
The struct includes the attributes sent from IdP as well as any corresponding locally
computed/derived attributes. Returns `nil` if the current Plug session
is not authenticated.
## Parameters
+ `conn` - Plug connection
## Examples
# When there is an authenticated SAML assertion
%Assertion{} = Samly.get_active_assertion()
"""
@spec get_active_assertion(Conn.t()) :: nil | Assertion.t()
def get_active_assertion(conn) do
case Conn.get_session(conn, "samly_assertion_key") do
{_idp_id, _nameid} = assertion_key ->
State.get_assertion(conn, assertion_key)
_ ->
nil
end
end
@doc """
Returns value of the specified attribute name in the given SAML Assertion.
Checks for the attribute in `computed` map first and `attributes` map next.
Returns a UTF-8 binary or a list of UTF-8 binaries (in case of multi-valued)
if the given attribute is present. Returns `nil` if attribute is not present.
## Parameters
+ `assertion` - SAML assertion obtained by calling `get_active_assertion/1`
+ `name`: Attribute name
## Examples
assertion = Samly.get_active_assertion()
# returns a list if the attribute is multi-valued
roles = Samly.get_attribute(assertion, "roles")
computed_fullname = Samly.get_attribute(assertion, "fullname")
"""
@spec get_attribute(nil | Assertion.t(), Assertion.attr_name_t()) ::
nil | Assertion.attr_value_t()
def get_attribute(nil, _name), do: nil
def get_attribute(%Assertion{} = assertion, name) do
Map.get(assertion.computed, name) || Map.get(assertion.attributes, name)
end
end