python 如何在django Oauth工具包中编辑ID Token中的声明?

您所在的位置:网站首页 access中数据库中的数据存储在哪里 python 如何在django Oauth工具包中编辑ID Token中的声明?

python 如何在django Oauth工具包中编辑ID Token中的声明?

2023-04-21 09:28| 来源: 网络整理| 查看: 265

使用Django OAuth Toolkit时,如果您在请求中提供openid作为scope,则使用OIDC会获得带有访问令牌的id_token。此ID令牌最初可用于识别您已获得访问令牌的用户,并创建会话。

{ "aud": "audience", "iat": 1681801110, "at_hash": "hash of included access token", "sub": "1", "given_name": "Dushyant", "preferred_username": "dsh", "iss": "authEndpointurl", "exp": 1681837110, "auth_time": 1681567804, "jti": "tokenid" }

但是我想修改这个JWT ID Token中的声明,它将授权服务器数据库的主键显示为用户的unique id,我不想在名为sub的声明中使用。我想使用另一个唯一的键作为sub声明的值。我尝试覆盖自定义后端的响应:

class CustomOAuthBackend(OAuthLibCore): def __init__(self, server): super().__init__(server) def create_token_response(self, request): response_data = super().create_token_response(request) #Modify the response here return response_data

并将其作为自定义后端添加到设置中。"OAUTH2_BACKEND_CLASS":"pathto.CustomOAuthBackend",我没有为这里的响应编写任何修改代码,因为这里的令牌已经在我调用原始的create_token_response时创建。

我想以一种可以修改claims dict的方式覆盖它,我不确定它是在哪里创建的。我们已经准备好了id_token。我想覆盖创建id_token的过程并更改sub claim值。

如果需要更多的信息,请告诉我。更新1:在寻找可能的解决方案时,发现oauth2_provider.oauth2_validators有方法get_oidc_claims()和get_id_token_dictionary(),看起来可能会导致可能的解决方案。弄清楚如何使用它。在代码中有一个写了这个方法是可选的,不推荐使用。finalize_id_token应该被实现。但是,如果你想完全控制id_token的铸造,你可能想覆盖get_id_token而不是使用finalize_id_token。这篇文章讨论了get_id_token()方法。通过代码,我看到finalize_id_token()是从声明创建JWT的方法。这个方法调用get_id_token_dictionary,然后这个内部调用get_oidc_claims(),然后这个调用get_claim_dict(request)。get_claim_dict(request)只接受一个请求,而其他方法也接受令牌等。这个方法看起来是正确的,因为它实际上将sub声明添加到声明中。

def get_claim_dict(self, request): if self._get_additional_claims_is_request_agnostic(): claims = {"sub": lambda r: str(r.user.id)} else: claims = {"sub": str(request.user.id)} # https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims if self._get_additional_claims_is_request_agnostic(): add = self.get_additional_claims() else: add = self.get_additional_claims(request) claims.update(add) return claims

我可以从这里得到索赔,修改它,并返回新的更新索赔。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3