我有一个由
组成的asp.net解决方案1). asp.net identity server rc 3
2). asp.net Core web api
3). asp.net webform ( not in asp.net core, client)
我没有看到任何带有身份服务器4和Web表单客户端的示例。您能否建议如何使用带有asp.net身份的身份服务器对Web表单用户进行身份验证,然后使用访问令牌调用api?
我没有看到带有web form client或sample的身份服务器4示例
中执行所有操作当我看到身份服务器4的mvc client时,它在configure方法中有所有设置,然后像this
那样调用它我将如何在webform中应用Authorize属性,以便将我重定向到身份服务器4进行登录,然后在登录后我调用api,如下所示:
如何更改webform的客户端?
new Client()
{
ClientId = "mvcClient",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets = new List<Secret>()
{
new Secret("secret".Sha256())
},
RequireConsent = false;
// where to redirect to after login
RedirectUris = { "http://localhost:5002/signin-oidc" },
// where to redirect to after logout
PostLogoutRedirectUris = { "http://localhost:5002" },
AllowedScopes =
{
StandardScopes.OpenId.Name,
StandardScopes.Profile.Name,
StandardScopes.OfflineAccess.Name,
StandardScopes.Roles.Name,
"API"
}
}
new InMemoryUser()
{
Subject = "1",
Username = "testuser",
Password = "password",
Claims = new List<Claim>()
{
new Claim("name", "Alice"),
new Claim("Website", "http://alice.com"),
new Claim(JwtClaimTypes.Role, "admin")
}
}
return new List<Scope>()
{
StandardScopes.OpenId, // subject id
StandardScopes.Profile, // first name, last name
StandardScopes.OfflineAccess,
StandardScopes.Roles,
new Scope()
{
Name = "API",
Description = "API desc",
Type = ScopeType.Resource,
Emphasize = true,
IncludeAllClaimsForUser = true,
Claims = new List<ScopeClaim>
{
new ScopeClaim(ClaimTypes.Name),
new ScopeClaim(ClaimTypes.Role)
}
}
};
public void CallApiUsingClientCredentials()
{
var tokenClient = new TokenClient("http://localhost:5000/connect/token", "mvc", "secret");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api1");
var client = new HttpClient();
client.SetBearerToken(tokenResponse.AccessToken);
var content = await client.GetStringAsync("http://localhost:5001/identity");
var result = JArray.Parse(content).ToString();
}
[Authorize(Roles="admin)]
[HttpGet]
public IActionResult Get()
{
return new JsonResult(from c in User.Claims select new { c.Type, c.Value });
}
答案 0 :(得分:0)
在WebForms中,您可以在web.config
<configuration>
<system.web>
<authorization>
<allow roles="domainname\Managers" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
另请参阅IdentityServer3示例中的web.config
<location path="About">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
答案 1 :(得分:0)
最新答案,但希望它能对仍然支持Web表单的人有所帮助。
将启动与Web窗体一起使用是没有问题的。唯一的限制是AuthorizeAttribute
在那里没有地方,但是仍然没有问题,只需输入:
app.UseStageMarker(PipelineStage.Authenticate);
位于您
的底部public void Configuration(IAppBuilder app)
OWIN启动中的方法。
示例启动实现could be fetched from my github。它可以与MVC,Web Forms一起使用,还可以从IdentityServer v.3的代码库中进行JWT验证,该代码库已升级为可以与最新的OWIN库一起编译。
如果我还有什么不清楚的地方,请随时在评论中提问。