首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有基本身份验证的应用程序在本地主机上工作,但在IIS上发布后获得未经授权的用户。

问具有基本身份验证的应用程序在本地主机上工作,但在IIS上发布后获得未经授权的用户。
EN

Stack Overflow用户
提问于 2019-10-29 08:04:38
回答 1查看 940关注 0票数 0

我有一个用MVC 4 web API编写的遗留web API,它具有基本的身份验证,当我测试它时,它使用POSTMAN在本地主机上工作,当我在iis上发布时,我得到401 -未经授权:访问由于无效的证书而被拒绝。我已经在iis服务器上启用了这个API的基本身份验证,但是我仍然得到了相同的错误,我应该在iis上或者在我的代码中更改一些东西吗?

Web:

代码语言:javascript
复制
   config.Filters.Add(new BasicAuthenticationAttribute());
   // config.Filters.Add(new AuthorizeAttribute());      
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );


    // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type.
    // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries.
    // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712.
    //config.EnableQuerySupport();

    // To disable tracing in your application, please comment out or remove the following line of code
    // For more information, refer to: http://www.asp.net/web-api

    config.EnableSystemDiagnosticsTracing()

认证类:

代码语言:javascript
复制
     public class BasicAuthenticationAttribute: AuthorizationFilterAttribute
    {
   public override void OnAuthorization(HttpActionContext actionContext)
    {
 var authHeader = actionContext.Request.Headers.Authorization;

 if (authHeader != null)
 {
    var authenticationToken = actionContext.Request.Headers.Authorization.Parameter;
    var decodedAuthenticationToken = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationToken));
    var usernamePasswordArray = decodedAuthenticationToken.Split(':');
    var userName = usernamePasswordArray[0];
    var password = usernamePasswordArray[1];

    // Replace this with your own system of security / means of validating credentials
    var isValid = userName == "rene" && password == "2019";

    if (isValid)
    {
        var principal = new GenericPrincipal(new GenericIdentity(userName), null);
        Thread.CurrentPrincipal = principal;

        actionContext.Response =
           actionContext.Request.CreateResponse(HttpStatusCode.OK,
              "User " + userName + " successfully authenticated");

        base.OnAuthorization(actionContext); 
    }
    else
    {
        HandleUnathorized(actionContext); 
    }
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-06 16:31:22

在部署到IIS时,我也遇到过类似的问题,很难确定问题的主要原因。我建议的是检查应用程序是否抛出错误,这可能是导致错误的原因。

您可以尝试以下方法:

IIS ( IIS )( authentications.

  • Windowslog/Application Framework3.5.Net Framework4.5等)确保存在所有依赖关系,并在IIS上进行配置。exits).

  • Windowslog/Security事件查看器用于查看错误或失败的(如果失败的尝试
    • 检查IIS日志文件(C:\inetpub\LogFiles),则显示错误。您可能会发现错误的线索。

我希望这对你有帮助,就像过去对我做的那样。在最坏的情况下,尝试使用新的IIS设置VM并在那里部署。然后交叉检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58603361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档