Skip to content

Instantly share code, notes, and snippets.

View mcguinness's full-sized avatar

Karl McGuinness mcguinness

  • Oakland, CA
  • 01:59 (UTC -07:00)
View GitHub Profile
@mcguinness
mcguinness / wag-id-jag-layering-strategy.md
Last active August 23, 2026 19:49
A Layered Strategy for ID-JAG, WAG, and Cross-Domain Delegation

A Layered Strategy for ID-JAG, WAG, and Cross-Domain Delegation

Executive Summary

Service providers increasingly need to authorize human users, services, and workloads across customer-controlled identity domains, and to distinguish a principal acting for itself from one acting on behalf of another, including multi-hop actor chains. The standards response should not be a separate end-to-end protocol for every combination of principal, issuer, delegation model, and topology. The recommended architecture:

  1. Use OAuth Identity and Authorization Chaining Across Domains as the optional cross-domain choreography around the grant profiles.
  2. Align the Identity Assertion JWT Authorization Grant (ID-JAG) and the Workload Authorization Grant (WAG) on the RFC 7523 redemption invariants they genuinely share; a common JWT Authorization Grant core is a candidate extraction from that demonstrated overlap, not a foundation designed up front.
  3. Keep ID-JAG the human-subject profile for Cross-App Access (XAA), includ
@mcguinness
mcguinness / README.md
Last active August 7, 2026 05:53
Draft response to ID-JAG issue #114: Cross-Client Delegation Profile + ID-JAG Enterprise Broker Deployment Pattern

Cross-Client Delegation for OAuth 2.0 Token Exchange

Draft response to ID-JAG issue #114 (Architectural Conflict in Gateway / Proxy Topology with Public Clients).

Bottom line. The choice comes down to the gateway's role in your topology. Default to the first; use the second when the gateway is genuinely a fan-out boundary; use the third only when neither is possible:

  • Recommended — gateway as client. Give the gateway its own user-audienced Identity Assertion, then run base ID-JAG from the gateway (a confidential client). Why the default: lowest mechanism, handles a public agent, needs no audience relaxation. Fits a gateway that reaches a manageable set of upstream services. Getting the gateway its own assertion has two realizations, with a real tradeoff (not just UX):
  • Silent (cross-client identity) — no prompt, and it carries identity directly from the agent's login;
@mcguinness
mcguinness / online_access_refresh_tokens.md
Last active October 9, 2022 01:06
Online Access Refresh Tokens

Problem Statement

The OAuth 2.0 Authorization Framework defines the authorization_code grant type and refresh token. It doesn't establish any rules for issuing refresh tokens and explicitly states in Section 1.5 that "Issuing a refresh token is optional at the discretion of the authorization server". One of the explicit goals for Rfc6749 was to enable offline access to protected resources when the end-user is not present. It does not define any request semantics for how a client can explicitly request a refresh token or whether that refresh token's lifecycle should be bound to the user's session that granted the refresh token. Authorization Servers are free to define these behaviors on a per-implementation or policy basis.

OpenID Connect being the identity layer ontop of OAuth 2.0 needed to define some new authorization server behaviors to enable end-user consent for when a client can access their identity info

@mcguinness
mcguinness / umbrella
Created August 23, 2016 03:58 — forked from quinncomendant/umbrella
OpenDNS umbrella start/stop script for Mac OS X. This makes it easy to turn umbrella off temporarily, or get its status.
#!/usr/bin/env bash
# Quinn Comendant <quinn@strangecode.com>
# https://gist.github.com/quinncomendant/3be731567e529415d5ee
# Since 25 Jan 2015
# Version 1.1
CMD=$1;
if [[ `id -u` = 0 ]]; then

Keybase proof

I hereby claim:

  • I am mcguinness on github.
  • I am mcguinness (https://keybase.io/mcguinness) on keybase.
  • I have a public key whose fingerprint is DDF0 E3D1 7A4C 5192 A9D1 0BF7 4E27 92F7 5D23 D9F0

To claim this, I am signing this object:

Multiple SSH Keys settings for different github account

create different public key

create different ssh key according the article Mac Set-Up Git

$ ssh-keygen -t rsa -C "your_email@youremail.com"