Last I knew, they were using Axis cameras, but that was a few years ago.
7,084 karma · joined May 5, 2011
[ my public key: https://keybase.io/lukeshu; my proof: https://keybase.io/lukeshu/sigs/HnTgaX1Qhui0yhjc6P-GRCJqUfJlk_xU09_TFpQKk0U ]
Last I knew, they were using Axis cameras, but that was a few years ago.
They mostly phased-out the "no bullshit" slogan from all of their branding with the v5 migration in 2018. It went from being in the homepage's <title> and the first thing you see on the homepage[1] and in the header at the top of every page to being just a tiny link under "About Us" in the homepage's footer[2].
I get phasing it out, to be more "business friendly" or whatever; but doing it at the same time as the big v5 UI and accounts overhaul... it seemed to me to be an admission that the fancy new Javascript UI was bullshit.
[1]: https://web.archive.org/web/20180104001527/https://www.gandi...
[2]: https://web.archive.org/web/20181230012842/https://www.gandi...
> OP: Posts a question
> Anon: [deleted by shreddit/PowerDeleteSuite/whatever]
> OP: Thanks, that solved my issue!
It's a modern version of https://xkcd.com/979/ !
The company was 90-some people when I left. We posted in the HN threads every month, but as far as I know, I was the only one hired from HN. One time I asked someone from HR about it, and they told me that we only got a very small number of responses from the HN threads, but that they were generally high-quality candidates, and that it just never worked out. In at least one of the cases we tried to hire the person, but he ended up ghosting us (I remember that one because I interviewed him... and now often notice his username in the comments).
I'm fine paying for things when I say "I like this, I want more of it." YouTube itself is the worst part of the experience, it's the part I want less of. YT would have to have way fewer dark patterns and bad behaviors for me to even consider paying for YouTube Premium.
I'm not sure what happened, since the relevant file hasn't been committed to in a while: https://web.cvs.savannah.gnu.org/viewvc/www/www/licenses/.sy...
[1]: https://openid.net/specs/openid-connect-discovery-1_0.html
> that's not correct in the most common flow?
No, he's right, I was misremembering (assuming "the most common" flow is the "authorization code" flow specified in RFC 6749 §4.1). The user-agent provides a one-time "authorization code" to the client via a GET, and then the client receives that "authorization code" and does its own POST to the IDP to exchange that "authorization code" for the final "access token".
> If it's opaque you introspect it to validate or you just validate the JWT signature after pulling the keys from the JWKS endpoint.
If it's a JWT, which it doesn't have to be. OIDC allows the token to either be an RFC 6750 opaque token, or an RFC 7523 JWT, and overwhelmingly implementations use a "bearer" (6750) token. But, most of the time it's a JWT, so as I said, closing your eyes and pretending it's a 7523 token works, and so then you can just pull the keys from the JWKS endpoint.
> Introspection is standardized and an RFC.
In my experience, it is exceedingly rare for an IDP to implement RFC 7662 token introspection
> All these URLs are defined and provided via the .well-known/openid-configuration endpoint.
Yeah, OIDC-discovery is pretty sweet. And if the IDP implements OIDC-discovery, then it probably implements OIDC-core, or at least enough of it that you can use the user-info endpoint, like I mentioned. But I've seen IDPs that don't.
Have you ever used OAuth2 outside of OIDC?
If you're only implementing a "client", then yeah, you can probably get away with never caring about inspecting the token. But if you're implementing a "resource server", then you'll need to, and it's all implementation-defined (but overwhelmingly that implementation is "it's a JWT").
If it's something dumb/simple like grabbing a JWKS URL and an "issuer" URL, and then doing JWT validation, sure. Maybe you need to make a weird bespoke request to some other endpoint. Maybe you need to implement some uncommon signature verification. It could be anything.
> At the beginning of the "standard" OAuth flow you can pass in client state. So you generate a signed nonce. Remember, you are starting this flow, so you mix in some user data (avoids CSRF problems), and you are pointing to some HTTPS site.
So you redirect the user's browser to the IDP, with the nonce in the URL. The user grabs that nonce from the URL bar, then manually navigates to your redirection-endpoint, putting that nonce and their own fabricated token in the URL.
> OAuth supports lots of different scenarios.
But it's literally only the skeleton of a protocol ("framework" of a protocol, as the actual spec puts it). That important "Then later on you can take the token and say 'Hey google, somebody gave me this token, who is it?'" part is totally unspecified by OAuth. How do you validate tokens? (Either on the resource-server end, or on the client-end to know if trying to talk to a resource-server is a waste of time, or to know if your post-redirect-uri is getting spoofed):
- OAuth: implementation defined
- most implementations: use our library, which validates the token using undocumented logic
- OIDC: there's a user-info endpoint you can call to, but lots of OAuth authorization servers don't fully implement OIDC, and even if they do, that's a lot of extra round trips
- RFC7523: The token is a JWT, validate the signature and claims... but everyone issues RFC6750 "bearer" tokens, not RFC7523 "urn:ietf:params:oauth:grant-type:jwt-bearer" tokens. But if you just close your eyes and pretend that your 6750 opaque token is actually a 7523 JWT and parse+validate it as such, that'll work most of the time.
So yeah, OAuth is hard because there's no great generic library, because a core part of it is implementation-defined, so you have to either do it yourself or use a specific implementation's library, and none of those libraries work quite the same.
(In the above, and for 99% of folks, "OAuth" = RFC6749+RFC6750)