我有一个在Windows Server 2012上运行的.net-core 2.2应用程序,使用angular作为前端SPA。在Windows域中,我已经在IIS服务器上运行了集成的Windows身份验证,在我的网站上也运行了Windows Auth,主要问题似乎是运行AppPool的服务帐户(如果我使用我的AD凭据运行了该网站) ,该网站会返回用户名,并以正确的角度显示在前端的前端,并带有
当我使用由我们的安全团队创建的服务帐户运行AppPool时,网站将用户名返回为
“”
空字符串。我确认运行应用程序池的服务帐户确实有权访问Active Directory,但此时我仍然茫然不知所措。
API控制器:
```
#region Get the logged in user
[HttpGet("api/getLoggedInUserObject")]
public async Task<ActionResult> CheckForLoggedInUser()
{
try
{
var user = await userResolverSerivce.GetUserObject();
return Ok(user);
}
catch (Exception ex)
{
Debug.Write(ex.InnerException.ToString());
throw new Exception("User is not logged in");
}
}
#endregion
```
用户主要回购
```
public class UserResolver : IUserResolver
{
private AuthorizedGroups AuthorizedGroups { get; set; }
private User _user { get; set; }
public UserResolver(IOptions<AuthorizedGroups> authorizedGroups, User user)
{
AuthorizedGroups = authorizedGroups.Value;
_user = user;
}
public Task<User> GetUserObject()
{
_user.FirstName = UserPrincipal.Current.GivenName;
_user.LastName = UserPrincipal.Current.Surname;
_user.FullName = $"{_user.FirstName} {_user.LastName}";
_user.AuthorizedRoles = GetAuthorizedRoles();
return Task.FromResult(_user);
}
```
角度HTML:
```
<div>
<nav class="navbar-dark nav-bar-large bg-dark fixed-top">
<span class="pull-right userHighlight">Welcome, {{data.userData.fullName}}</span>
<div class="container" id="navbarNav">
<img class="image-center" src="../../assets/img/logo_sm.png" />
</div>
</nav>
</div>
```
角度TS:
```
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { UserService } from '../services/user.service';
import { User } from '../models/user';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-main-container',
templateUrl: './main-container.component.html',
styleUrls: ['./main-container.component.css'],
encapsulation: ViewEncapsulation.None
})
export class MainContainerComponent implements OnInit {
private data: any;
private user: User[];
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.data = this.route.snapshot.data;
console.log(this.route.snapshot.data);
}
}
```
预期输出应返回服务帐户下的用户名,而不是一个空字符串,我一直在想为什么一个服务帐户有效而另一个服务帐户无效。控制台中没有错误。
答案 0 :(得分:1)
您需要的是获取呼叫者的身份,并且假设您在使用Windows身份验证时应该获取它。
但是.Net核心API不支持模拟。解决方法是使用以下代码获取用户名
下面的代码可能会帮助您:
from scipy.ndimage.interpolation import shift
def shift_image(image, dx, dy):
image = image.reshape((28, 28))
shifted_image = shift(image, [dy, dx], cval=0, mode="constant")
return shifted_image.reshape([-1])