如何使用Okta,Web API 2和Angular2在具有相同API的两个不同的前端应用程序中单独进行身份验证?

时间:2016-04-05 20:40:03

标签: .net api authentication web okta

如何使用相同的API在两个不同的前端应用程序中单独进行身份验证?

TL; DR - 是否可以将项目中的子目录列入白名单,这样当来自那里的请求时,我的web.config中的被动重定向设置将被忽略并且&# 34;客户用户"将被允许​​访问该子目录中的登录页面以进行身份​​验证,而不是"员工用户",然后只能通过基于角色访问应用程序的那部分/那些web api端点授权?

这是我在入门级软件开发中差不多两年就StackOverflow提出的第一个问题,所以如果我絮絮叨叨的话,我会提前道歉。我需要一些帮助!我希望只要写出来就能帮助我思考问题 - 我已经找到了问题的答案,但还没找到我需要的答案。

这主要适用于使用OKTA身份验证的.NET WEB API 2经验的人。

我正在开发一个应用程序,需要有两种方式登录(来自两个独立的Angular2前端Web应用程序)并成为经过身份验证的用户才能访问相同的.NET WEB API 2服务器(不一定相同)确切的端点,只是相同的服务器)。

我们目前在服务器项目中配置了一个组织的SSO系统(通过web.config设置),以重定向任何未经身份验证的用户,使用他们公司的凭据(这使用OKTA身份验证http://developer.okta.com/)进行登录,一旦他们这样做那个,OKTA返回一个我可以轻松地用来与我的应用程序数据库中的某些用户记录进行比较的主体,并根据用户角色等授予授权。这在我的多个部署环境中都运行良好。无论何时调用API端点,都会在应用启动时发生重定向(这种情况发生在应用的每个页面上)。

我现在的问题是我们需要允许客户端(不是使用SSO的员工)登录位于单独目录中的单独的Angular2 Web应用程序,例如www.stackoverflow.com / client /通过他们自己的,更简单的身份验证过程,以便他们可以访问我的服务器项目中的客户端API端点。

(重复/继续TL; DR)是否可以将项目中的子目录列入白名单,这样当来自那里的请求时,我的web.config中的被动重定向设置将是忽略并允许客户端用户访问该子目录中的登录页面以获得客户端而不是员工的身份验证(我将为其编写逻辑),然后只能访问应用程序的那部分/那些Web api端点是否通过基于角色的授权?

如果他们在该子目录之外导航,我希望重定向能够像现在一样触发,这样他们就不会看到任何仅限员工的功能。

以下是我的Web.Config.cs中的相关行:

<configuration>
  <system.identityModel>
    <identityConfiguration>
      <audienceUris>
        <add value="https://www.NotForSharingOnStackoverflow.com/" />
      </audienceUris>
      <certificateValidation certificateValidationMode="None" />
      <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=NotForSharingOnStackoverflow">
        <trustedIssuers>
          <add thumbprint="NotForSharingOnStackoverflow" name="Okta" />
        </trustedIssuers>
      </issuerNameRegistry>
      <securityTokenHandlers>
        <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler,System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=NotForSharingOnStackoverflow" />
        <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=NotForSharingOnStackoverflow" />
      </securityTokenHandlers>
    </identityConfiguration>
  </system.identityModel>
  <system.identityModel.services>
    <federationConfiguration>
      <wsFederation name="WSFederationConfig" passiveRedirectEnabled="true" issuer="https://www.NotForSharingOnStackoverflow.com/" realm="urn:okta:app:NotForSharingOnStackoverflow" requireHttps="false" />
      <cookieHandler requireSsl="false" name="NotForSharingOnStackoverflow" />
    </federationConfiguration>
  </system.identityModel.services>
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
    <machineKey compatibilityMode="Framework45" validationKey="NotForSharingOnStackoverflow" decryptionKey="NotForSharingOnStackoverflow" validation="SHA1" decryption="AES" />
  </system.web>
  <system.webServer>
    <modules>
      <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=NotForSharingOnStackoverflow" preCondition="managedHandler" />
    </modules>
  </system.webServer>
</configuration>

以前有人试过这个吗?我的方法是否可行?我是Angular2和Okta的新手,并且仍然是一个入门级开发人员做.NET的东西,所以任何建议或文章链接将不胜感激。谢谢! :)

编辑:我目前正在浏览这篇文章(由同事链接),并希望这里的选项可以提供有效的解决方案。看起来像是一点点工作,但如果其他人以前做过这件事,我仍然非常喜欢一些建议! https://msdn.microsoft.com/en-us/library/hh446524.aspx

0 个答案:

没有答案