首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IdentityServer 4中使用授权代码流保护公共API

在IdentityServer 4中使用授权代码流保护公共API
EN

Stack Overflow用户
提问于 2020-05-24 02:04:01
回答 2查看 1.2K关注 0票数 2

我在我的应用程序中被一个非常基本的要求困住了。这是我的设想。我正在构建一个自定义的电子商务门户,使用angular作为前端,rest作为后端。我有一个产品列表API,它将由我的application应用程序调用,而不需要用户的凭据,因为产品列表是一个公共页面。但是,我不希望其他人使用我的产品清单API。我知道我可以使用客户端id和客户端秘密来获得令牌,并使用Identityserver 4使我的API安全,但是,如何避免在一个角度应用程序中暴露我的客户端秘密呢?任何人都可以很容易地偷走它。是否有任何方法将授权代码流与PKCE一起用于公共的my,例如不需要用户id和密码的产品列表API?

EN

回答 2

Stack Overflow用户

发布于 2020-05-24 22:23:37

对我来说,回答这个问题的最好方法是回到授权码流.Authorization代码授予的定义,这是一个基于重定向的流,用于获取访问令牌和刷新令牌,客户端通过引导资源所有者启动流。

pkce只是对授权代码流的扩展,以防止某些攻击。

那么答案是否定的,我们不能在没有用户登录的情况下使用PKCE中的授权代码流来保护公共API。还有其他一些方法来保护公共API,或者至少使其更少/更难访问。CORS是一个选项,请阅读更多的这里,因为它与这个问题的上下文无关,我不想更进一步。

对于有登录的场景,IdentityServer4支持授权代码流。以下是我们为实现这一目标所需要做的工作:

  1. IdentityServer上添加js客户端的配置条目如下:
代码语言:javascript
复制
new Client
{
   ClientId = "jsclient",
   ClientName = "JavaScript Client",
   AllowedGrantTypes = GrantTypes.Code,
   RequirePkce = true,
   RequireClientSecret = false,
   RedirectUris =  { "http://localhost:5003/callback.html" },
   PostLogoutRedirectUris = { "http://localhost:5003/index.html" },
   AllowedCorsOrigins =
   { 
       "http://localhost:5003" 
   },
   AllowedScopes = {"openid", "profile", "offline_access", "api1", "api2" },
}
  1. 在SPA应用程序上使用奥迪-客户库,并添加OIDC配置如下
代码语言:javascript
复制
var config = {
    authority: "http://localhost:5000",
    client_id: "js",
    redirect_uri: "http://localhost:5003/callback.html",
    response_type: "code",
    scope:"openid profile api1",
    post_logout_redirect_uri : "http://localhost:5003/index.html",
};
var mgr = new Oidc.UserManager(config);

找到完整的示例代码这里。我强烈建议阅读quickstart doc以更好地理解实现细节。

票数 1
EN

Stack Overflow用户

发布于 2020-05-24 09:30:34

您应该通过插入广泛使用的OIDC客户端库来实现角应用程序中的授权代码流--它的UserManager类将为您完成这项工作。

有关如何使用它的示例,请参阅我的以下资源:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61980791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档