微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Keycloak - WPF 检查权限

如何解决Keycloak - WPF 检查权限

我有一个 WPF 应用程序(.net 462 和 API .net5.0)。

我已经在 api 和这项工作上设置了 openid,权限工作,但在 WPF 应用程序上,我必须检查应用程序元素的权限(菜单访问、按钮访问)。

获取令牌工作,但我不知道如何在 openid 时验证范围

关键时钟配置:

  • Realm => 演示测试
  • 客户端 => 演示测试客户端
  • 客户角色 => DemoRole
  • 授权范围 => demo:read
    • 相关权限 => 权限演示:阅读
    • 角色相关政策 => DemoRole - 正面

我创建了两个用户“user-test-ok”和“user-test-ko”,“user-test-ok”具有客户端角色“DemoRole”。

我对用户进行了自省测试,以验证用户是否具有“demo:read”范围,但这不起作用。

我不想使用 keycloak API,我想使用 openid 系统,以便其他 OAuth2.0 系统可能更改 keycloak。

这是我尝试检查授权范围的代码

var requestUri = new Uri($"https://localhost:8443/auth/realms/{realm}/protocol/openid-connect/token/introspect");

using (var client = new HttpClient())
{
    var req = new HttpRequestMessage(HttpMethod.Post,requestUri);
    req.Headers.Add("cache-control","no-cache");
    req.Headers.Add("accept","application/x-www-form-urlencoded");

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",accesstoken);

    req.Content = new FormUrlEncodedContent(new Dictionary<string,string>
    {
        { "token_type_hint","requesting_party_token" },{ "token",tokenResult.Accesstoken },{ "client_id",clientId },{ "client_secret",clientSecret },{ "scope","test:read" },});

    var response = client.SendAsync(req).Result;

    if (!response.IsSuccessstatusCode)
    {
        throw new Exception();
    }

    var responseString = response.Content.ReadAsstringAsync().Result;

}

你知道怎么做吗?

解决方法

如果我阅读了令牌自省端点文档 here,那么它没有说明将范围 ({ "scope","test:read" },) 作为参数传递。相反,您从该请求中获取返回的信息,然后首先检查主动声明是否为真。这表明令牌仍然有效且有效..

然后您只需检查返回的数据。或者,您只需使用访问权限或 ID 令牌中的范围值来授予用户对应用程序中功能的访问权限。

请检查请求在 Fiddler 之类的工具中返回的内容。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。