ExFTP.Auth.BasicAuth (ExFTP v1.0.4)
View SourceWhen authenticator is ExFTP.Auth.BasicAuth
, this authenticator will call out to an HTTP endpoint that implements
HTTP Basic Auth with the user's
supplied credentials.
๐ Security
BasicAuth
is not recommended for situations not protected by SSL.
โ๏ธ Configuration
Keys
- authenticator ==
ExFTP.Auth.BasicAuth
- authenticator_config ::
ExFTP.Auth.BasicAuthConfig.t/0
Example
%{
# ... ,
authenticator: ExFTP.Auth.BasicAuth,
authenticator_config: %{
login_url: "https://httpbin.dev/basic-auth/",
login_method: :get,
authenticated_url: "https://httpbin.dev/hidden-basic-auth/",
authenticated_method: :get,
authenticated_ttl_ms: 1000 * 60 * 60
}
}
๐ See Also
๐ Resources
- ๐ RFC 959 (section-4)
- ๐ RFC 3659
- ๐ฌ Contact the maintainer (he's happy to help!)
Summary
Functions
Determines whether this session is still considered authenticated
Requests a login using HTTP Basic Auth
Always returns true
.
Functions
@spec authenticated?(authenticator_state :: ExFTP.Authenticator.authenticator_state()) :: boolean()
Determines whether this session is still considered authenticated
๐ท๏ธ Params
- authenticator_state ::
ExFTP.Authenticator.authenticator_state/0
๐งโ๐ณ Workflow
- Reads the authenticator_config.
- If the config has authenticated_url,
- Calls it using HTTP Basic Auth with username and password provided by the user
- If the response is HTTP 200, success. Otherwise, no longer authenticated.
- If the config does not have authenticated_url,
- investigate the authenticator_state for
authenticated: true
- investigate the authenticator_state for
โคต๏ธ Returns
โ On Success
`true` or `false`
๐ป Examples
iex> alias ExFTP.Auth.BasicAuth
iex> username = "jsmith"
iex> password = "password"
iex> Application.put_env(:ex_ftp, :authenticator, ExFTP.Auth.BasicAuth)
iex> Application.put_env(:ex_ftp, :authenticator_config, %{
iex> login_url: "https://httpbin.dev/basic-auth/" <> username <> "/" <> password,
iex> login_method: :get,
iex> authenticated_url: "https://httpbin.dev/hidden-basic-auth/" <> username <> "/" <> password,
iex> authenticated_method: :get,
iex> authenticated_ttl_ms: 1000 * 60 * 60
iex> })
iex> {:ok, state} = BasicAuth.login(password, %{username: username})
iex> BasicAuth.authenticated?(state)
true
๐ See Also
@spec login( password :: ExFTP.Authenticator.password(), authenticator_state :: ExFTP.Authenticator.authenticator_state() ) :: {:ok, ExFTP.Authenticator.authenticator_state()} | {:error, term()}
Requests a login using HTTP Basic Auth
๐ท๏ธ Params
- password ::
ExFTP.Authenticator.password/0
- authenticator_state ::
ExFTP.Authenticator.authenticator_state/0
๐งโ๐ณ Workflow
- Reads the authenticator_config.
- Receives a password from the client (a username was provided earlier)
- Calls the login_url with HTTP Basic Auth
- If the response is HTTP 200, success. Otherwise, bad login.
โคต๏ธ Returns
โ On Success
{:ok, authenticator_state}
โ On Failure
{:error, bad_login}
๐ป Examples
iex> alias ExFTP.Auth.BasicAuth
iex> username = "jsmith"
iex> password = "password"
iex> Application.put_env(:ex_ftp, :authenticator, ExFTP.Auth.BasicAuth)
iex> Application.put_env(:ex_ftp, :authenticator_config, %{
iex> login_url: "https://httpbin.dev/basic-auth/" <> username <> "/" <> password,
iex> login_method: :get,
iex> authenticated_url: "https://httpbin.dev/hidden-basic-auth/" <> username <> "/" <> password,
iex> authenticated_method: :get,
iex> authenticated_ttl_ms: 1000 * 60 * 60
iex> })
iex> {:ok, _} = BasicAuth.login(password, %{username: username})
๐ See Also
@spec valid_user?(username :: ExFTP.Authenticator.username()) :: boolean()
Always returns true
.
No performance benefit
This method is normally used to short-circuit bad login requests. The performance gain in that short-circuit is negligible for basic auth, so it's not used.