从4.6项目迁移到.NET Core 3,我不确定100%是否正确实现了事情。
我遵循了本文中的步骤,请确保按照“在不使用ASP.NET Core身份的情况下使用WS-Federation”部分下的代码示例配置startup.cs。 https://docs.microsoft.com/en-us/aspnet/core/security/authentication/ws-federation?view=aspnetcore-3.0
登录似乎可以正常工作,因为我已重定向到MS登录,并使用预期的cookie(例如MSISAuthenticated)发送回了我的应用程序。但是,user.identity.isauthenticated总是错误的,我没有可用的声明。这是预期的行为吗?也许我没有正确配置东西?理想情况下,我希望能够检查用户是否已通过身份验证并访问声明。
我见过很多有关基于组添加策略的文章,但是如果没有可用的声明,[Authorize(Policy =“ SomeGroup”)]还能起作用吗?
ConfigureServices代码: enter image description here
配置代码: enter image description here
控制器操作:
public IActionResult Index()
{
var identity = (ClaimsIdentity)User.Identity;
ViewBag.Claims = identity.Claims;
return View();
}
查看代码:
@using System.Security.Claims;
@{
ViewBag.Title = "Home Page";
IEnumerable<Claim> claims = (IEnumerable<Claim>)ViewBag.Claims;
}
@if (User.Identity.IsAuthenticated)
{
<div class="jumbotron">
<h1>Successful Sign On!</h1>
</div>
<div class="row">
<div class="col-md-12">
<h2>WS Federation Services Claims</h2>
@foreach (Claim claim in claims)
{
<p>
<b>@(claim.Type.ToString())</b>
<br />
@(claim.Value.ToString()) (type: @(claim.ValueType.ToString()))
<hr />
</p>
}
</div>
</div>
}
else
{
<div class="jumbotron">
<h1>SSO Test</h1>
<p class="lead">To sign in using Microsoft's single sign-on service, click the button below.</p>
<p><a href="/account/signin" class="btn btn-primary btn-lg">Sign in »</a></p>
</div>
}
答案 0 :(得分:0)
也许事实是您没有将所需的ResourceUrl发送到ADFS。然后,ADFS考虑默认资源,并发出没有声明的令牌。 请参阅“高级AD FS身份验证流程”中有关3步骤的更多信息
AD FS标识客户端要访问的资源 身份验证请求中传递的资源参数。如果使用MSAL 客户端库,则不发送资源参数。相反, 资源url作为scope参数的一部分发送:scope = [资源网址] // [范围值,例如openid]。