Przede wszystkim przepraszam, jeśli to pytanie zostało już wcześniej zadane. Przez długi czas szukałem i istnieje wiele pytań związanych z tym, ale nie mogę tego zrobić głowy.

Muszę zbudować aplikację za pomocą usługi WCF i ASP.NET MVC. Pracowałem z MVC wcześniej, ale jestem całkowicie nowy w WCF Service. Architektura aplikacji jest dostęp do bazy danych z usługi WCF i piszę cały kod w WCF. A MVC działa jako klient i po prostu dodam referencję do usług w MVC, aby spożywać usługi i wykonywanie połączeń do WCF za każde działanie.

Teraz moje pytanie brzmi, jak wdrożyłem uwierzytelnienie i autoryzację w tej architekturze. Chcę tylko mieć rejestr, logowanie funkcjonalność, a także kilka ról. Tak jak w jaki sposób używamy członkostwa ASP.NET, aby wdrożyć rejestr, funkcje logowania i zarządzamy role podczas pracy z MVC, czy jest coś takiego w WCF? Jest tam i tak, że mogę użyć członkostwa bezpośrednio z klienta MVC bez podłączenia DB w kliencie, np. Dokonywanie zmian w konfiguracji, abyśmy mogli połączyć się z DB przez WCF?

Z tego, co do tej pory czytałem, mogę użyć członkostwa ASP.NET, ale muszę dokonać zmian w konfiguracji. I bez względu na to, ile artykułów, które czytam, nadal jestem zdezorientowany, jak to zrobić.

Czy ktoś może mi wyjaśnić, jakie zmiany powinienem zrobić w konfiguracjach klientów i usług, aby to pracować? Lub wskazać mi przewodnik, który to wyjaśnia? Próbuję w tym czasie od tygodnia i każdy artykuł, który przeczytałem, wspomina o zmianie kodu Web.Config, ale nigdy nie wspominają o tym, czy jest to plik internetowy klienta lub plik Web.Config w serwisie.

P.S: Przepraszam za wszelkie błędy w ramach pytania lub tytułu. Mam nadzieję, że jestem oczywisty, prosząc moje pytanie, jeśli nie, pozwól mi pozwolić jasno wyjaśnić. To moje pierwsze pytanie tutaj i z góry dziękuję.

0
sag_ar 23 listopad 2020, 10:07

1 odpowiedź

Najlepsza odpowiedź

WCF może korzystać z dostawcy członkostwa ASP.NET. Po złączeniu do aplikacji WCF użytkownicy muszą dostarczyć kombinację nazwy / hasła do aplikacji klienta WCF. Aby przenieść dane do usługi WCF, użyj wiązania, które obsługuje nazwę użytkownika / hasło poświadczenia, takie jak WSHTTPBinding (w konfiguracji, WSHTTPBinding) i ustaw typ poświadczeń klienta do nazwy użytkownika. W usłudze WCF Security uwierzytelnia użytkownika na podstawie nazwy użytkownika i hasła, a także przypisuje rolę określoną przez rolę ASP.NET.

Aby uzyskać więcej informacji na ten temat, można odwołać się do tego Link.

AKTUALIZACJA:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <connectionStrings>
    <add name="SqlConn" connectionString="server=10.157.19.67;database=aspnetdb;uid=sa;password=123456;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear />
        <add
          name="SqlMembershipProvider"
          type="System.Web.Security.SqlMembershipProvider"
          connectionStringName="SqlConn"
          applicationName="WcfService2"
          enablePasswordRetrieval="false"
          enablePasswordReset="false"
          requiresQuestionAndAnswer="false"
          requiresUniqueEmail="true"
          passwordFormat="Hashed" />
      </providers>
    </membership>
    <roleManager enabled ="true"
                 defaultProvider ="SqlRoleProvider" >
      <providers>
        <add name ="SqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider"
             connectionStringName="SqlConn"
             applicationName="WcfService2"/>
      </providers>
    </roleManager>
    <compilation debug="true" targetFramework="4.7.2" />
    <httpRuntime targetFramework="4.7.2"/>
  </system.web>
    
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding>
          <security mode="Message">
            <message clientCredentialType="UserName"></message>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider">
          </serviceAuthorization>
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider"/>
            <serviceCertificate storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" findValue="9bb09c1d6e719bf7121814cc73451947d410a501"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="wsHttpBinding" scheme="http" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

Musimy użyć uwierzytelniania nazwy użytkownika wraz z członkostostamiProvider. Klient przekazuje nazwę użytkownika przez proxy.Clientcredentials.username.username i hasło za pomocą proxy.Clientcredentials.username.password podczas dzwonienia.

1
Ding Peng 26 listopad 2020, 08:24