gpt4 book ai didi

go - 从 Go 中的 SAML 响应中获取用户名

转载 作者:数据小太阳 更新时间:2023-10-29 03:24:02 29 4
gpt4 key购买 nike

我正在尝试构建一个基于 Go 的网络服务器(在 Azure 中运行),它允许使用 SAML 进行单点登录。应用程序的部分标准是有两层访问权限:首先应该确定用户是否有权访问网页本身,其次用户应该只能访问他有权查看的数据。

我查看了 godoc 列出的库,但我似乎找不到实现第二个标准的方法。我们希望使用与 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)
}

但是,我不确定如何让变量“user”填充到正确的范围内,以及我可以从哪里获得这些信息。我一直在寻找使用 github.com/crewjam/saml,但我可以灵活地切换到不同的解决方案。 godoc 在“选项”结构中提到了一个指向“saml.EntityDescriptor”结构的指针,它似乎包含一个用户名字段,但我不确定这是否可行,以及如何在我的函数“foo”。

最佳答案

SAML 中的“用户名”可以来自任何形式的 IdP。它包含在您事先知道的属性中,或者您要求 IdP 维护者为您发布。查看 SAML Response here

在响应中有一个 AttributeStatement 包含多个 Attribute 断言。其中一个 Attribute 断言是 uid,它被解释为“用户名”。在这种情况下,“用户名”是“测试”。

EntityDescriptor 是 SAML2 元数据规范的一部分,不用于保存属性。它用于描述 SP 和 IdP 等实体,以便它们可以相互信任。

要决定用户应该访问应用程序的哪些部分,您可以使用 eduPersonEntitlement Attribute。这通常包含一个 URI 或 URN,例如 https://your.app.com/entitlment/admin

关于go - 从 Go 中的 SAML 响应中获取用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47101837/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com