.NET CORE和ADFS没有可用的声明

时间:2019-12-04 21:25:57

标签: asp.net-core .net-core adfs ws-federation

从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 &raquo;</a></p>
    </div>
}

1 个答案:

答案 0 :(得分:0)

也许事实是您没有将所需的ResourceUrl发送到ADFS。然后,ADFS考虑默认资源,并发出没有声明的令牌。 请参阅“高级AD FS身份验证流程”中有关3步骤的更多信息

enter link description here

  

AD FS标识客户端要访问的资源   身份验证请求中传递的资源参数。如果使用MSAL   客户端库,则不发送资源参数。相反,   资源url作为scope参数的一部分发送:scope =   [资源网址] // [范围值,例如openid]。