WebApi:基于令牌的 Windows 身份验证

Tob*_*ias 5 c# authentication windows-authentication asp.net-web-api

有没有办法在 web api 应用程序中同时使用基于令牌的身份验证和 Windows 身份验证?

我们有一个使用基于令牌(承载)身份验证的“标准”web-api 应用程序。

OAuth 配置如下所示:

OAuthOptions = new OAuthAuthorizationServerOptions {
     TokenEndpointPath = new PathString("/Token"),
     Provider = new ApplicationOAuthProvider(PublicClientId),
     AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
};
app.UseOAuthBearerTokens(OAuthOptions);
Run Code Online (Sandbox Code Playgroud)

一切正常。调用“/Token”端点时,您将获得令牌并获得授权。

现在我想添加 Windows 身份验证,以通过调用 web-api 的客户端的 Windows-os 的登录用户启用“signle-sign-on”。

到目前为止我做了什么:

更改了 web.config 并添加了

<system.web>
  <identity impersonate="true" />
  <validation validateIntegratedModeConfiguration="false" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

现在每个请求都通过 Windows 用户进行身份验证,而不使用令牌过程。

因此,我添加了另一个提供程序,以使用您的 Windows 身份登录并获取令牌:

app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions {
    TokenEndpointPath = new PathString("/IdentityToken"),
    Provider = new WindowsIdenityAuthorizationServerProvider(),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
});
Run Code Online (Sandbox Code Playgroud)

ApplicationOAuthProvider除了密码验证之外,提供程序应该与为具有用户名和密码的请求生成令牌的程序几乎相同。不幸的是,在针对“/IdentityToken”端点的请求中没有设置用户/身份。

任何人都可以帮我解决这个问题还是我完全走错了路?