[{"data":1,"prerenderedAt":308},["ShallowReactive",2],{"project-14694210":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":43,"post_text":45,"what":46,"said":70,"maker_in_thread":168,"shape":177,"grid":181,"attempts":270,"same_week":271,"maker_shows":38,"maker_hidden":300,"reader_version":301,"card":302},"14694210","login-with","OAuth microservice for FB, Twitter, etc.","title","Show HN: OAuth microservice for FB, Twitter, etc.","https:\u002F\u002Flogin-with.com","login-with.com","fitz2001",1499153709,2017,127,38,331,2242,15,"notable","infrastructure","authentication microservice","library",[24,25,21,26,27],"oauth","social login","jwt","single sign-on","mixed",-0.196,{"positive":31,"neutral":32,"mixed":33,"critical":34},2,8,0,9,19,{"docs":37,"idea":40,"privacy":41},{"positive":38,"critical":39},1,4,{"positive":38,"critical":38},{"positive":33,"critical":42},3,[38,33,38,33,33,38,42,42,33,38,42,33,42,33,42,38,33,38,42,33,33,44,44,33,33,38,42,38,42,33,33,38,33,33,33,33,33,33],5,null,{"problem":47,"audience":54,"pricing":45,"motivation":45,"time_to_build":45,"stack":58,"openness":67,"stage":68,"team_size":69},{"value":48,"source":49,"evidence":50},"Adding login with Google, Facebook or Twitter to a website without reimplementing OAuth","maker",[51],{"id":52,"by":11,"text":53},"14696229","It's helpful if you want your website\u002Fwebapp to support login with X (Google, Facebook, etc). Your services on the same domain can than use these credentials and eventually use…",{"value":55,"source":49,"evidence":56},"Developers building websites or web apps on one domain",[57],{"id":52,"by":11,"text":53},[59],{"value":60,"source":61,"evidence":62},"JWT","commenter",[63],{"id":64,"by":65,"text":66},"14696264","nielsole","\"On successful login two cookies will be created: ``` jwt - A \"JSON Web Token\" (JWT) containing profile information and the respective access tokens (Twitter\u002Fetc). http-only!…","open_source","launched","unknown",{"praise":71,"objections":90,"requests":127,"questions":144,"alternatives":160},[72,83],{"value":73,"source":61,"evidence":74},"Useful idea that removes the need to reimplement login services",[75,79],{"id":76,"by":77,"text":78},"14695690","johnbellone","This is really cool. I was looking for something like this a few days ago for a side project. Great job!",{"id":80,"by":81,"text":82},"14696703","hultner","How does it handle revoked and expired sessions? From my prior research this seems to be a problem with the JWT which would either require distribution of ever growing blacklists…",{"value":84,"source":61,"evidence":85},"GitHub README explains the project well",[86],{"id":87,"by":88,"text":89},"14695940","jarym","I found the GitHub link to contain a lot of useful info about what this is: https:\u002F\u002Fgithub.com\u002Flipp\u002Flogin-with Very nice work!",[91,102,109,117],{"value":92,"source":61,"evidence":93},"Landing page does not explain what the service does or why to use it",[94,98],{"id":95,"by":96,"text":97},"14695658","Sujan","The information on `\u002Flogin` should probably be on \u002F so I can read somewhere what \"Stateless authentication microservice\" actually means. Also maybe a sentence why this is neat…",{"id":99,"by":100,"text":101},"14696697","usea","This kind of explanation would be really useful on the website. Right now it has nothing to describe what it is\u002Fdoes.",{"value":103,"source":61,"evidence":104},"Session revocation and expiry handling is unclear with JWTs",[105,106],{"id":80,"by":81,"text":82},{"id":107,"by":81,"text":108},"14701076","That's only true if you do not allow for long running sessions which are commonplace today. And it still requires a lookup every time to see if a particular session is…",{"value":110,"source":61,"evidence":111},"Cookie profile data could be tampered with unless the JWT signature is checked",[112,113],{"id":64,"by":65,"text":66},{"id":114,"by":115,"text":116},"14696757","transitorykris","The JWT is signed (see LW_JWT_SECRET env variable), you'll want to check the signature before trusting the rest of the contents.",{"value":118,"source":61,"evidence":119},"Social login invites fake accounts and spam",[120,124],{"id":121,"by":122,"text":123},"14696736","RUTHLESS_RUFUS","I cannot wait to allow a bazillion fake Twitter and FB accounts from the Eastern Bloc countries to pour into my website and bigly MAGA. Thanks, social sign-on!",{"id":125,"by":122,"text":126},"14697323","Administrators and community moderation who pay attention to their own access logs rather than ambiguous Facebook Review Teams who look the other way.",[128,133,140],{"value":129,"source":61,"evidence":130},"Add a clear explanation of the service on the front page",[131,132],{"id":95,"by":96,"text":97},{"id":99,"by":100,"text":101},{"value":134,"source":61,"evidence":135},"Add LinkedIn support",[136],{"id":137,"by":138,"text":139},"14695701","Gys","Could be useful in my current project, but I need LinkedIn also.",{"value":141,"source":61,"evidence":142},"Publish API documentation",[143],{"id":80,"by":81,"text":82},[145,152],{"value":146,"source":61,"evidence":147},"What is the use case and what happens after login?",[148],{"id":149,"by":150,"text":151},"14696132","saganus","So what's exactly the use case for this? I'm not entirely sure. Let's say I deploy it. Users of whatever service I provide use this to login to Google, Twitter, etc, then what?…",{"value":153,"source":61,"evidence":154},"How are revoked and expired sessions handled?",[155,156],{"id":80,"by":81,"text":82},{"id":157,"by":158,"text":159},"14697700","nathancahill","Expired can happen clientside, just check the timestamp. Revoked would be a short blacklist that lasts the duration of the session, once a token is expired it no longer has to be…",[161],{"value":162,"source":61,"evidence":163},"oauth2_proxy",[164],{"id":165,"by":166,"text":167},"14697222","olalonde","https:\u002F\u002Fgithub.com\u002Fbitly\u002Foauth2_proxy is a good one as well.",{"comments":44,"answered":38,"key":169},[170,173,174],{"id":171,"text":172},"14696150","Would be great if you could create an issue and write some more details about your requirement.",{"id":52,"text":53},{"id":175,"text":176},"14696153","THX!",{"commenters":178,"max_depth":44,"maker_replies":44,"first_comment_mins":179,"lifespan_hours":180},21,341,80,[182,184,186,190,194,196,200,204,207,210,212,214,216,218,220,222,223,225,227,229,232,234,236,238,240,242,243,244,245,248,250,253,256,259,260,262,264,267],[95,33,38,183,96,33],"project\u002Fcritical\u002Fdocs",[171,33,33,185,11,38],"commenter\u002Fneutral\u002Fdocs",[187,33,38,188,189,33],"14696689","maker\u002Fcritical\u002Fdocs","rhizome",[191,33,33,192,193,33],"14697272","commenter\u002Fneutral\u002Fnone","dtech81",[195,33,33,192,189,33],"14697435",[197,33,38,198,199,33],"14697761","maker\u002Fcritical\u002Fnone","kasparsklavins",[201,33,42,202,203,33],"14697000","maker\u002Fneutral\u002Fdocs","paulddraper",[205,33,42,206,96,33],"14700600","project\u002Fneutral\u002Fdocs",[208,33,33,185,209,33],"14699324","aisofteng",[211,33,38,183,96,33],"14700558",[213,33,42,206,209,33],"14701765",[215,33,33,192,96,33],"14702182",[149,38,42,217,150,33],"project\u002Fneutral\u002Fidea",[52,38,33,219,11,38],"maker\u002Fneutral\u002Fidea",[221,38,42,217,150,33],"14696420",[99,38,38,183,100,33],[224,38,33,185,209,33],"14699332",[64,38,38,226,65,33],"project\u002Fcritical\u002Fprivacy",[114,38,42,228,115,33],"project\u002Fneutral\u002Fprivacy",[230,38,33,192,231,33],"14697052","_ao789",[233,38,33,192,150,33],"14698424",[87,31,44,235,88,33],"project\u002Fpositive\u002Fdocs",[76,42,44,237,77,33],"project\u002Fpositive\u002Fidea",[175,42,33,239,11,38],"maker\u002Fneutral\u002Fnone",[165,39,33,241,166,33],"other\u002Fneutral\u002Fnone",[80,44,38,226,81,33],[157,44,42,228,158,33],[107,44,38,226,81,33],[137,246,42,247,138,33],6,"project\u002Fneutral\u002Fnone",[249,246,33,239,11,38],"14696148",[251,246,33,252,11,38],"14718959","maker\u002Fpositive\u002Fnone",[121,254,38,255,122,33],7,"project\u002Fcritical\u002Fidea",[257,254,33,192,258,33],"14697255","michaelmior",[125,254,33,192,122,33],[261,254,33,192,258,33],"14697591",[263,254,33,192,122,33],"14697605",[265,254,33,192,266,33],"14698052","tudorconstantin",[268,254,33,269,209,33],"14699334","commenter\u002Fcritical\u002Fnone",[],[272,277,282,287,291,296],{"id":273,"name":274,"points":275,"category":276},"14703098","A virtual machine made with Google Sheets formulas (no script)",620,"languages",{"id":278,"name":279,"points":280,"category":281},"14691407","Under the hood ReactJS",266,"learning_science",{"id":283,"name":284,"points":285,"category":286},"14662860","VisiData",221,"dev_tools",{"id":288,"name":289,"points":290,"category":286},"14688031","Vecta.io",154,{"id":292,"name":293,"points":294,"category":295},"14690517","Artpip",142,"creative",{"id":297,"name":298,"points":299,"category":286},"14667344","SOTA-Py",121,false,"v2",{"id":303,"name":5,"line":6,"ai":300,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":304,"top":18,"kw":305,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":306,"url":9,"mix":307,"praise":73,"objection":92,"sub":21},14694210,-0.2,[24,25,21,26,27],"10100133013030310130055001313001000000",[31,32,33,34],1794036556954]