从 Go 中的 SAML 响应中获取用户名
Obtaining the user's name from a SAML response in Go
我正在尝试构建一个基于 Go 的网络服务器(运行 在 Azure 中),它允许使用 SAML 进行单点登录。应用程序的部分标准是有两层访问权限:首先应该确定用户是否有权访问网页本身,其次用户应该只能访问他有权查看的数据。
我查看了 godoc 列出的库,但我似乎找不到实现第二个标准的方法。我们想使用与 SAML 响应关联的 username/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)
}
但是,我不确定如何让变量 'user' 填充到正确的范围内,以及我可以从哪里获得这些信息。我一直在寻找使用 github.com/crewjam/saml,但我可以灵活地切换到不同的解决方案。 godoc 在 'options' 结构中提到了一个指向 'saml.EntityDescriptor' 结构的指针,它似乎包含一个用户名字段,但我不确定这是否可行,以及如何在我的职能范围 "foo".
SAML 中的 "username" 可以来自任何形式的 IdP。它包含在您事先知道的属性中,或者您要求 IdP 维护者为您发布。看看 SAML Response
here
响应中有一个 AttributeStatement
包含多个 Attribute
断言。 Attribute
断言之一是 uid
,它被解释为 "username"。在这种情况下 "username" 是 "test".
EntityDescriptor
是 SAML2 元数据规范的一部分,不用于保存属性。它用于描述 SP 和 IdP 等实体,以便它们可以相互信任。
要决定用户应该访问应用程序的哪些部分,您可以使用 eduPersonEntitlement
Attribute
。这通常包含 URI 或 URN,例如 https://your.app.com/entitlment/admin
我正在尝试构建一个基于 Go 的网络服务器(运行 在 Azure 中),它允许使用 SAML 进行单点登录。应用程序的部分标准是有两层访问权限:首先应该确定用户是否有权访问网页本身,其次用户应该只能访问他有权查看的数据。
我查看了 godoc 列出的库,但我似乎找不到实现第二个标准的方法。我们想使用与 SAML 响应关联的 username/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)
}
但是,我不确定如何让变量 'user' 填充到正确的范围内,以及我可以从哪里获得这些信息。我一直在寻找使用 github.com/crewjam/saml,但我可以灵活地切换到不同的解决方案。 godoc 在 'options' 结构中提到了一个指向 'saml.EntityDescriptor' 结构的指针,它似乎包含一个用户名字段,但我不确定这是否可行,以及如何在我的职能范围 "foo".
SAML 中的 "username" 可以来自任何形式的 IdP。它包含在您事先知道的属性中,或者您要求 IdP 维护者为您发布。看看 SAML Response
here
响应中有一个 AttributeStatement
包含多个 Attribute
断言。 Attribute
断言之一是 uid
,它被解释为 "username"。在这种情况下 "username" 是 "test".
EntityDescriptor
是 SAML2 元数据规范的一部分,不用于保存属性。它用于描述 SP 和 IdP 等实体,以便它们可以相互信任。
要决定用户应该访问应用程序的哪些部分,您可以使用 eduPersonEntitlement
Attribute
。这通常包含 URI 或 URN,例如 https://your.app.com/entitlment/admin