An open API service indexing awesome lists of open source software.

https://github.com/rvl/hsoz

Oz Auth Haskell Implementation
https://github.com/rvl/hsoz

authentication hawk iron

Last synced: 3 months ago
JSON representation

Oz Auth Haskell Implementation

Awesome Lists containing this project

README

          

# Oz Haskell Implementation

[![Build Status](https://travis-ci.org/rvl/hsoz.svg?branch=master)](https://travis-ci.org/rvl/hsoz) [![Hackage](https://img.shields.io/hackage/v/hsoz.svg)](http://hackage.haskell.org/package/hsoz)

*hsoz* is a Haskell implementation of the Iron, Hawk, and Oz web
authentication protocols. These protocols originate from the OAuth2
standardisation process, but are designed to be simpler to implement
for the common case of web applications.

## Introduction

In the words of their principal designer:

**Iron** is a cryptographic utility for sealing a JSON object using
symmetric key encryption with message integrity verification. Or in
other words, it lets you encrypt an object, send it around (in
cookies, authentication credentials, etc.), then receive it back and
decrypt it. The algorithm ensures that the message was not tampered
with, and also provides a simple mechanism for password rotation.

**Hawk** is an HTTP authentication scheme using a message
authentication code (MAC) algorithm to provide partial HTTP request
cryptographic verification.

**Oz** is a web authorization protocol based on industry best
practices. Oz combines the Hawk authentication protocol with the
Iron encryption protocol to provide a simple to use and secure
solution for granting and authenticating third-party access to an
API on behalf of a user or an application.

## Documentation

The Haddock documentation is on [Hackage](http://hackage.haskell.org/package/hsoz)
and at https://rodney.id.au/docs/hsoz/.

* [Network.Iron](http://hackage.haskell.org/package/hsoz/docs/Network-Iron.html)
* [Network.Hawk](http://hackage.haskell.org/package/hsoz/docs/Network-Hawk.html)
* [Network.Oz](http://hackage.haskell.org/package/hsoz/docs/Network-Oz.html)

## Example Usage

See the [Network.Iron](http://hackage.haskell.org/package/hsoz/docs/Network-Iron.html)
documentation, and the [example](./example/) directory of this
repository.

## Status

This is an in-progress experiment in implementing the protocol in
Haskell.

* **Iron**: complete
* **Hawk**: complete
* **Oz**: under construction.
* **Example web application**: under construction.

*Please note*: until the example application is built, this library
cannot be considered "battle-tested".

There is also an `org-mode` file: [todo.org](./todo.org?raw=1).

## Development

I welcome collaborators, particularly anyone who would like to develop
authentication plugins for frameworks such as
[Snap](http://snapframework.com/) and
[Servant](https://haskell-servant.github.io/), or a manager for
[Wreq](http://www.serpentine.com/wreq/).

### Building with Stack

```
stack build
```

### Building with Nix

```
nix-shell -p cabal2nix --command "cabal2nix --shell . > default.nix"
nix-shell --command "cabal configure"
cabal build
```

## Credits

This module is based on the Javascript code and documentation by Eran
Hammer and others. A fair amount of Hammer's descriptive text has been
incorporated into this documentation, as well as the cool logos.