Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C#] Creazione di una API agganciata a membership provider

    ciao!

    mi hanno chiesto di creare una API in C# partendo da un vecchio progetto Asp.NET WEBFORM (5/6 anni).
    devo fare anche l'autenticazione usando anche JWT per il token.
    a questa API poi non so quali client si agganceranno (probabile un client angular e una app).

    ovviamente devo usare il db che già c'è, comprese le tabelle create dal membership provider del progetto.
    sarebbe possibile, per l'autenticazione, agganciare un progetto di tipo API .NET core 6 a quelle tabelle senza stravolgere tutto, ed usarci anche JWT??

    scusate se magari ho detto qualche castroneria ma non espertissimo di asp.net webform.

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,492
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ciao!

    mi hanno chiesto di creare una API in C# partendo da un vecchio progetto Asp.NET WEBFORM (5/6 anni).
    devo fare anche l'autenticazione usando anche JWT per il token.
    a questa API poi non so quali client si agganceranno (probabile un client angular e una app).

    ovviamente devo usare il db che già c'è, comprese le tabelle create dal membership provider del progetto.
    sarebbe possibile, per l'autenticazione, agganciare un progetto di tipo API .NET core 6 a quelle tabelle senza stravolgere tutto, ed usarci anche JWT??

    scusate se magari ho detto qualche castroneria ma non espertissimo di asp.net webform.
    Purtroppo ti avevo scritto una accurata risposta, ma é andata persa nel passaggio tra l'invio e l'autenticazione... quindi in breve riepilogando (non ho voglia di riscrivere tutto):
    In sostanza puoi fare quasi tutto quello che hai chiesto, quello che non puoi fare é mischiare net 6 e net framework nello stesso progetto.

  3. #3
    Quote Originariamente inviata da U235 Visualizza il messaggio
    Purtroppo ti avevo scritto una accurata risposta, ma é andata persa nel passaggio tra l'invio e l'autenticazione... quindi in breve riepilogando (non ho voglia di riscrivere tutto):
    In sostanza puoi fare quasi tutto quello che hai chiesto, quello che non puoi fare é mischiare net 6 e net framework nello stesso progetto.
    ciao!

    grazie per la risposta!

    vabbè tranquillo, quanto meno so che si può fare!
    cmq non intendo mischiare le due versioni di .net.

    è che non riesco a trovare una documentazione più o meno esaustiva.
    nel senso che tutto quello che trovo sul .net core 6 e jwt non fa mai riferimento a SqlMembershipProvider, che è quello che ho nel web.config del progetto attuale.

    hai magari qualche link specifico??

    -----------------

    oppure, ieri sera mi era anche venuto in mente di agganciarmi a quel db eseguendo query custom.
    però non so come viene creato l'hash delle password, quindi non saprei cosa passargli alla query.
    ad esempio, dalla pagina di login di angular, quale hash usare per criptare la pwd messa dall'utente.

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,492
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ciao!

    grazie per la risposta!

    vabbè tranquillo, quanto meno so che si può fare!
    cmq non intendo mischiare le due versioni di .net.

    è che non riesco a trovare una documentazione più o meno esaustiva.
    nel senso che tutto quello che trovo sul .net core 6 e jwt non fa mai riferimento a SqlMembershipProvider, che è quello che ho nel web.config del progetto attuale.

    hai magari qualche link specifico??

    -----------------

    oppure, ieri sera mi era anche venuto in mente di agganciarmi a quel db eseguendo query custom.
    però non so come viene creato l'hash delle password, quindi non saprei cosa passargli alla query.
    ad esempio, dalla pagina di login di angular, quale hash usare per criptare la pwd messa dall'utente.
    Devi gestire la cosa "a mano", nel senso che dovresti poter utilizzare la MembershipProvider per autenticare (a mano) l'utente quando chiede di essere autenticato per il rilascio del token. Forse questo link un po datato potrebbe fornirti qualche suggerimento.

  5. #5
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,492
    P.S.
    Ciao (non ti ho mai salutato in questa discussione)

  6. #6
    ciao!

    grazie, stamattina mi ci sono messo ma ho anche altri problemi.
    apro un thread a parte!

  7. #7
    ciao!

    nel frattempo, sempre prendendo spunto dal link che mi hai inviato e facendo altre ricerche, ho provato banalmente a fare così:
    codice:
            [HttpGet(Name = "GetOne")]
            public User GetOne()
            {
                User user = new User();
    
                using (SqlConnection connection = new SqlConnection(connAccount))
                {
                    connection.Open();
    
                    string pwd = "MIA_PWD";
                    string salt = GenerateSalt();
                    string password = EncodePassword(pwd, salt);
                    //string query = "SELECT au.UserName UserName FROM aspnet_Users au INNER JOIN aspnet_Membership am ON au.UserId = am.UserId WHERE au.UserName = 'matteo' AND am.Password = 'PWD_HASH_COPIATA_DA_DB'";
                    string query = "SELECT au.UserName UserName FROM aspnet_Users au INNER JOIN aspnet_Membership am ON au.UserId = am.UserId WHERE au.UserName = 'matteo' AND am.Password = '" + password + "'";
                    Console.WriteLine(query);
    
                    using (SqlCommand cmd = new SqlCommand(query, connection))
                    {
                        using (SqlDataReader sdr = cmd.ExecuteReader())
                        {
                            while (sdr.Read())
                            {
                                user.UserName = sdr["UserName"].ToString();
                            }
                        }
    
                        connection.Close();
                    }
                }
    
                return user;
            }
    la connessione al db avviene senza problemi.
    se provo ad usare la stringa di query commentata (quindi con la pwd hardcoded) funziona, nel senso che mi restituisce il record trovato.
    nel secondo caso ovviamente no.
    a questo punto

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,492
    Non credo quadrino... non so esattamente come il provider gestisce la codifica.
    In ogni caso se usi Net Framework non dovresti avere problemi ad usare la membership, ma mi pare di capire che tu vuoi usare il db gestito dal provider di net framework facendo le query, in una applicazione net 6 per l'autenticazione e il rilascio di jwt, e questo non so se ti sar� possibile con le query al db senza riuscire a capire come vengano codificate o senza poter riscrivere il tuo provider in modo da dare tu le info necessarie alla codicfica.
    Un altra soluzione sarebbe quella di fare una chiamata in background all'interno del controller che rilascia il jwt in net 6 verso net framework per autenticarsi, una volta accertate le credenziali tramite questa chiamata si potrebbe rilasciare il jwt usando Identity.

    Quindi per capirci:
    il client fa richiesta di rilascio jwt a server A(net 6)-> server A esegue una chiamata ad una webapi predisposta su server B(Net framework) passando user e password->se b autentifica il chiamante, A rilascia il jwt.

  9. #9
    ciao!

    ma in verità io userei anche direttamente MembershipProvider, solo che non riesco ad usarlo.
    ho creato un altro thread per non fare confusione (https://forum.html.it/forum/showthre...readid=2976872).
    anzi, in verità penso sia la soluzione migliore.

    ma nel frattempo che cerco di risolvere quel problema, sto cercando un'alternativa!

  10. #10
    alla fine abbiamo optato per questa opzione:
    - creiamo un'altra tabella con idutente e password, salvata in SHA512
    - il vecchio applicativo, cheì cmq continuerà ad esistere, continuerà con la sua autenticaizione
    - e si occuperà anche di creare / modificare la password SHA512 in questa nuova tabella
    - la nuova api farà una classica query cercando per nome utente e password mettendo in join le tabelle standard con questa nuova

    in questo modo posso scrivere l'api come mi pare senza stare a preoccuparmi del MembershipProvider.
    anzia, visto che a quanto pare ci sono problemi nell'installare una nuova versione del .NET sulla macchina (non so quali, non sono io che me ne occupo), è probabile che l'api la scriverò in un altro linguaggio.

    ciao e grazie per le dritte!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2022 vBulletin Solutions, Inc. All rights reserved.