2017-11-03 8 views
0

SAMLを使用したシングルサインオンを可能にするGoベースのWebサーバー(Azureで実行)を構築しようとしています。アプリケーションの基準の一部は、アクセスの2つのレイヤーがあることです。まず、ユーザーがWebページ自体にアクセスできるかどうかを判断し、次に、ユーザーは、表示する権利があるデータにのみアクセスできるようにします。GoでSAML応答からユーザー名を取得

godocにリストされているライブラリを調べましたが、2番目の基準を実装する方法が見つからないようです。 SAML応答に関連付けられたユーザー名/ IDをデータベースクエリの一部として使用したいと考えています。私はこの情報をどこで見つけることができるのか分かりません。私は

http.Handle("/apicall", samlSP.RequireAccount(http.HandlerFunc(foo))) 

func foo(w http.ResponseWriter, r *http.Request) { 
    user := // ? 
    body, err := ioutil.ReadAll(r.Body) 
    if err != nil { 
     log.Println(err) 
    } 
    var filter FilterParameters 
    err = json.Unmarshal(body, &filter) 
    if err != nil { 
     log.Println(err) 
    } 
    apiStruct := API(filter, user) 
    json.NewEncoder(w).Encode(apiStruct) 
} 

ような何かをしなければならないように現時点では、それはそうですが、私は正しいスコープで満たされた変数「ユーザー」を取得する方法を確認していない、と私はどこからこの情報を取得することができます。私はgithub.com/crewjam/samlを利用しようとしていましたが、私は別のソリューションに切り替えて柔軟に対応しています。 godocは 'options'構造体のポインタを 'saml.EntityDescriptor'構造体に記述していますが、これはユーザー名のフィールドを含んでいるようですが、これがうまくいくかどうかわかりません。私の関数 "foo"。

答えて

0

SAMLの「username」は、どの形式のIdPからでも入力できます。これはあなたがあらかじめ知っている属性に含まれていますか、IdPメンテナにあなたにリリースするよう依頼してください。複数Attributeアサーションを含むAttributeStatementがある応答でSAML Responsehere

を見てみましょう。それらのうちの1つはuidであり、これは "username"を意味すると解釈されます。この場合、「username」は「test」です。

EntityDescriptorは、SAML2メタデータ仕様の一部であり、属性の保持には使用されません。これは、SPやIdPなどのエンティティを記述するために使用され、相互に信頼できるようにします。

ユーザーがアクセスする必要があるアプリケーションの部分を決定するには、eduPersonEntitlementAttributeを使用できます。これには通常、URIまたはURNが含まれています。https://your.app.com/entitlment/admin

+0

ありがとう、これが正しい方向に私をプッシュしました!私が今、ミドルウェア受信機を持つRequireAccountのような機能を理解している限り、クレームから属性を追加することによってhttp.Requestを変更してください。私はこれを試してみましょう。 – Dylan

関連する問題