Popularity
0.6
Growing
Activity
2.4
-
0
0
1
Programming language: Crystal
License: MIT License
Tags:
HTTP
ntlm alternatives and similar shards
Based on the "HTTP" category.
Alternatively, view ntlm alternatives based on common mentions on social networks and blogs.
-
Cable
An ActionCable "port" to Crystal, framework agnostic, 100% compatible with the ActionCable JS Client -
http-params-serializable
HTTP params (de)serialization, applicable to URL queries and URL-encoded forms -
ContentDisposition
Crystal shard to create HTTP Content-Disposition headers with proper escaping/encoding of filenames
Get performance insights in less than 4 minutes
Scout APM uses tracing logic that ties bottlenecks to source code so you know the exact line of code causing performance issues and can get back to building a great product faster.
Sponsored
scoutapm.com
Do you think we are missing an alternative of ntlm or a related project?
README
Crystal Lang NTLM Auth
Communicate with servers that implement NTLM auth.
Installation
- Add the dependency to your
shard.yml
:
dependencies:
ntlm:
github: spider-gazelle/ntlm
- Run
shards install
Usage
Authenticate a HTTP request
require "http/client"
require "ntlm"
route = "/terrible/soap/api"
username = "username"
password = "password"
# NOTE:: domain is not always required, this can sometimes be left `nil`
domain = "DOMAIN"
client = HTTP::Client.new "corporate.service"
response = client.get route
if response.status_code == 401 && response.headers["WWW-Authenticate"]?
supported = response.headers.get("WWW-Authenticate")
raise "doesn't support NTLM auth: #{supported}" unless supported.includes?("NTLM")
# Negotiate NTLM
response = client.get route, HTTP::Headers{"Authorization" => NTLM.negotiate_http(domain)}
# Extract the challenge
raise "unexpected response #{response.status_code}" unless response.status_code == 401 && response.headers["WWW-Authenticate"]?
challenge = response.headers["WWW-Authenticate"]
# Authenticate the client
response = client.get route, HTTP::Headers{"Authorization" => NTLM.authenticate_http(challenge, username, password)}
end
response