gpt4 book ai didi

c# - 用于用户管理的 Identity Server 和 web api

转载 作者:太空狗 更新时间:2023-10-29 20:19:46 25 4
gpt4 key购买 nike

我正在为我的项目使用 Identity Server3,我目前有一个网站和 api 受 Id 服务器保护,这工作正常但是因为我将用户存储在 Id Server 数据库中我不能真正改变来自网站的任何用户数据,例如更改个人资料图片或任何声明值(value)。

为了解决这个问题,我正在考虑在 IdServer 之上创建一个 API,该 API 将管理用户、更改密码、检索用户或基本上更改与用户相关的任何内容,我想在我的 IdServer 使用 Owin 映射的示例项目。

现在我的 idServer 像这样放在/identity 路由中

public class Startup
{
public void Configuration(IAppBuilder app)
{

Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Trace().CreateLogger();

app.Map("/identity", idserverApp =>
{
var efConfig = new EntityFrameworkServiceOptions
{
ConnectionString = "IdSvr3Config"
};

var options = new IdentityServerOptions
{
SiteName = "Identity server",
IssuerUri = ConfigurationManager.AppSettings["idserver:stsIssuerUri"],
PublicOrigin = ConfigurationManager.AppSettings["idserver:stsOrigen"],
SigningCertificate = Certificate.Get(),
Factory = Factory.Configure(efConfig),
AuthenticationOptions = AuthOptions.Configure(app),
CspOptions = new CspOptions { Enabled = false },
EnableWelcomePage=false
};


new TokenCleanup(efConfig, 3600 * 6).Start();
idserverApp.UseIdentityServer(options);
});

app.UseIdServerApi();

}
}

我的api“中间件”是这样的

**public static class IdServerApiExtensions
{
public static void UseIdServerApi(this IAppBuilder app, IdServerApiOptions options = null)
{
if (options == null)
options = new IdServerApiOptions();

if (options.RequireAuthentication)
{
var dic = app.Properties;
JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
app.UseIdentityServerBearerTokenAuthentication(
new IdentityServerBearerTokenAuthenticationOptions
{
Authority = "https://localhost:44302/identity", //here is the problem, it says not found even though I already mapped idServer to /identity
RequiredScopes = new[]
{
"idserver-api"
},
ValidationMode=ValidationMode.ValidationEndpoint
});
}
var config = new HttpConfiguration();
WebApiConfig.Register(config,options.RequireAuthentication);
app.UseNinjectMiddleware(() => NinjectConfig.CreateKernel.Value);
app.UseNinjectWebApi(config);
app.Use<IdServerApiMiddleware>(options);
}
}**

我知道这是可能的,我只是不知道在同一个项目中使用 api 是否是个好主意,而且我也不知道该怎么做。

  • 创建此 API 来管理用户是个好主意吗?如果不能,我可以使用什么?
  • 如何创建适当的设置来启动/api 下的 API,同时使用 IdServer 来保护此 api?

更新

添加 ValidationMode=ValidationMode.ValidationEndpoint,解决了我的问题,感谢 Scott Brady

谢谢

最佳答案

Identity Server 团队的一般建议是将任何管理页面或 API 作为单独的项目运行 (Most recent example)。最佳做法是只允许您的身份服务器和身份管理应用程序访问您的身份数据库/存储。

要管理您的用户,是的,您可以编写自己的 API。其他选项是将其包含在单个 MVC 网站或使用类似 Identity Manager 的内容。 .

不过,您仍然可以使用相同的应用程序方法,即使用 OWIN map 。为了确保这一点,您可以使用 IdentityServer3.AccessTokenValidation包,使用如下代码:

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = ConfigurationManager.AppSettings["idserver:stsOrigen"],
RequiredScopes = new[] { "adminApi" },
ValidationMode = ValidationMode.ValidationEndpoint
});

关于c# - 用于用户管理的 Identity Server 和 web api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38236876/

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