<podcast:verifyOwnership> #534
Replies: 26 comments 62 replies
-
Why not use |
Beta Was this translation helpful? Give feedback.
-
If I understand this correctly, it does use Currently, without
|
Beta Was this translation helpful? Give feedback.
-
The @jamescridland yes! That's exactly the kind of flow you could create with this tag. This completely eliminates the need for the podcaster to add anything to their RSS feed and immediately provide authorization to any app seeking to verify ownership. |
Beta Was this translation helpful? Give feedback.
-
Some Security StuffAfter the host auths you, and you are redirected back, the site that receives you needs to do some kind of handshake with the host with a token from the redirect URL, right? Otherwise, this is easy to fake? Also, I think to avoid phishing or some other security problems, the host would have to have an allowlist of sites that the redirect can go to. Here's the attacking scenario: a) Bad guy wants to steal your podcast on listening app X that supports podcast:authorization Google, Stripe, etc, all have allow lists for domains and/or sites that the redirect can go to. I think hosts would have to do the same. This starts to increase the complexity of this then, where each host needs a list of approved apps. So I think the actual implementation of this is a little bit harder / more complicated than your description. It is, of course, doable! Separately, my personal viewThe problem that @jamescridland describes is more of a branding problem / the difference between a feature's name and how it's rendered in the feed. I feel 95% of the problem with podcast:txt would be standardizing the podcaster-facing name and the language we use around it. The average of times a podcaster connects their podcast to a new service is maybe < 20 over the lifetime of their podcast, probably much less. The pattern of 'enter a code' is a very common one for verification around the internet, and is simple for hosts and apps to implement. Apple, one of if not the largest apps, already uses this technique. I'd love to see more iteration on the existing solution vs. tossing it just yet. Just my 2 cents. |
Beta Was this translation helpful? Give feedback.
-
No I don't think because this is a one-time authorization. The only reason I can think of for a token would be if we wanted them to continue to make authorized requests.
I think 99% of the problem is complexity for the podcaster (and the podcast host) that significantly interrupts the flow of the podcast app that requires authorization. |
Beta Was this translation helpful? Give feedback.
-
As a podcast host. I fully support the removal of the email as it was used by bad actors aka Acast to spam hosts. Podcast:Txt seemed to be a simple solution at first glance but in practical terms it is a nightmare because it relies on the user to login to their host find the Podcast:txt field and then republish the RSS feed. This can take 5+ mins or more by which time they are bored or have gone onto another task. Tom's solution is simple and neat. We will try and test this with Buzzcast to see how it works. |
Beta Was this translation helpful? Give feedback.
-
This proposal doesn't address that, since Apple (for example) requires a correct email for |
Beta Was this translation helpful? Give feedback.
-
Apple no longer has this requirement. |
Beta Was this translation helpful? Give feedback.
-
I agree that an oauth-style flow would be a lot easier for the podcaster, for sure. I'm just not sure the juice is worth the squeeze -- would love to hear from more folks. Our customer bases likely have varying characteristics / struggles.
I could be wrong or missing something, but imagine this scenario:
I think for this transaction to be secure, there'd need to be some back end exchange between myplayer.com and mypodcasthost.com after the redirect, or some kind of signature in the redirect URL using a key that myplayer can authenticate. |
Beta Was this translation helpful? Give feedback.
-
@tomrossi7, can you point me to a more current reference that confirms this? I'll happily remove it from my validator if there's a source I can cite. https://help.apple.com/itc/podcasts_connect/#/itcb54353390
@mkadin, I feel like you're right about the potential attack vector, and I wonder if this could be simplified even more to eliminate it. For example, it could work like:
Hosts could even auto-expire |
Beta Was this translation helpful? Give feedback.
-
@mkadin I think you are correct 😬. A nefarious actor could just monitor the requests and they would see the Okay, okay, okay. Here me out:
Idea 1 would work today and be pretty easy BUT I hate that you are waiting for the RSS feed to update. Thoughts? @CharlesWiltgen I don't know that Apple has formally communicated it anywhere, but many hosts (including Buzzsprout) have removed emails without any issues with Apple. |
Beta Was this translation helpful? Give feedback.
-
Is there any further thoughts on this proposal. I really want to implement this but don't want to waste my time if the proposal from (@tomrossi7) Tom Rossi is going to be changed. |
Beta Was this translation helpful? Give feedback.
-
This would be very helpful for companies like mine. Right now (with the 5 hosting providers who have removed email from RSS), we've written up training for podcasters to unhide their email temporarily so they can validate ownership of their podcast. ^ It's an extra step for the podcaster, which I always hate. With that said, I'm a HUGE fan of hiding email addresses in RSS. My hope is that every one of us does that. I'll say this in every post I do on here: But the less we can show in RSS, the better. I'd love one day for it to be nearly blank. Simplicity is the ultimate sophistication. |
Beta Was this translation helpful? Give feedback.
-
A cheaper/quicker way might be to have the option to leave off the OAuth entirely, and instead the UX goes like this...
Benefits of this are that it takes the podcaster to the page that she needs to add the code. If it's possible to add the code as well, that's probably good. Another potential benefit is that we could use an open database of podcast hosting companies, so doesn't require any work on the podcast hosting company side if they're truly lazy. If we know it's a Buzzsprout podcast, we know it won't deal with adding the auth code, so the UX would work like this:
And another potential benefit is that it could still work with an OAuth-like service if both sides want to code that. The podcast host might add a "type=oauth" flag in the tag maybe. |
Beta Was this translation helpful? Give feedback.
-
Here is my proposal. In the following example, we have a
<podcast:verify
verifyUrl="https://hostingcompany.com/verify/some-podcast-guid"
publicKey="my-public-key"
/> to Benefits
What do you think? Anything that I'm missing? Could this be made simpler? |
Beta Was this translation helpful? Give feedback.
-
I would recommend the public key of the podcast owner/creator be carried in a separate Roughly something like: <podcast:ownerIdentity
publicKey="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAygB8Uk2NdMSQInDHIcNMw4VabaT..."
name="Dave Jones"
type="rsa2048"
/>
|
Beta Was this translation helpful? Give feedback.
-
I wonder if we just need to suck it up and implement oauth? Otherwise every use case we come up with where we want to go through the podcast host to verify ownership will require a lot more specification? 🤷♂️ |
Beta Was this translation helpful? Give feedback.
-
I spoke with @tomrossi7 earlier tonight, and we kind of landed on the solution that @jamescridland proposed above - just having a simple authorization tag with a URL pointing to the hosting company. The app wanting to verify ownership would send a random string (of some specified constraints) as a parameter to that URL. The hosting company would then force a login by the user, and once complete, would just take that string and place it in the TXT record and republish the feed. The service requesting authorization would then poll the feed until it finds the token or a timeout period expires. The benefit of this flow is that it allows self hosted feeds to also easily comply with the authorization spec. The requesting app/platform can also show the token to the user when there is no authorization tag present which falls back to the manual editing behavior. There isn’t a way to avoid having to poll the feed for an authorization code if the service in question is going to support self hosted feeds. So, that code will have to be written regardless - it might as well be put to use all the way around. I really can’t find a flaw with this simple scenario. If we have missed something, please point it out. @jamescridland laid it out well in his posting above and is worth re-reading. One thing that I have been guilty of with this tag/spec is describing it as “authorization” which tends to lead towards credential acquisition, and thus to a solution like oAuth. But really, it’s just owner verification that is needed here, not credentialing or authorization in the technical sense. And we literally just got finished solving owner verification with the TXT tag so it makes perfect sense to use it. |
Beta Was this translation helpful? Give feedback.
-
Sorry this isn't prettier 🤣. This could be really simple. @mkadin would you guys support it? Do you think others in the PSP would implement? ![]() |
Beta Was this translation helpful? Give feedback.
-
If the path forward is just a URL to automate filling in the TXT tag, do we really need a standalone tag for this? Any reason this shouldn’t be implemented as a new attribute on the TXT tag? |
Beta Was this translation helpful? Give feedback.
-
As an App developer, I am pleased this new tag is being finally discussed. But one thing being overlooked is the user experience. So far I have heard about the user changing the TXT field and republishing with a podping update. Technically that this is not a problem but it's never going to work for 90% of users. Most users don't know how to change their DNS records etc. And unsurprisingly they don't know how to add their email back into their RSS feed. And in the same way, they won't know how to update the Podcast:Txt field. The user needs to know nothing other than their login and pwd. So in the RSS feed there is a new field Podcast:Verify or <Podcast: Txt> e.g <podcast:txt purpose="verify">ddlllvznnm</podcast:txt> . Podfans reads this field and adds a claim button with the URI and token back to the host. The user is asked to login to verify their credentials and then when proved a URI redirect is sent back to Podfans. This is one click and back like Oauth. This is a good user experience. The alternative of waiting for Podping and then we have to update the claim button to show verification might take over a minute. The other problem for Podfans is we can't send the email with instructions to access the podcast admin dashboard until we have verification. However if this works then this fixes another problem for app developers. It means we can also verify who the host is for the podcast. The iTunes:Generator field is a mess of data. Some people put in their host e.g Captivate and others put in their RSS generator e,g Podcast Index uses Sovereign Feeds while others put in random text. Knowing the podcast host will allow Podfans to make a 1% split back to the host for all the transactions for that verified podcast and any other podcasts that host verifies will also get a 1% split. |
Beta Was this translation helpful? Give feedback.
-
@samsethi, why is that? I was told by someone in the thread that
A feed owner has to add a challenge code (required to be an OAuth Authorization Server URL in the method you're prescribing) in either case, right? What makes it simpler for the feed owner to add that instead of a unique string? My 2¢: I'd suggest making it even simpler and recommending (vs. requiring) the use of |
Beta Was this translation helpful? Give feedback.
-
This is a messy rough-draft of the authorization tag write-up. Please look for glaring errors: https://github.com/Podcastindex-org/podcast-namespace/blob/phase-7/docs/1.0.md#authorization |
Beta Was this translation helpful? Give feedback.
-
@tomrossi7 Can we call this the |
Beta Was this translation helpful? Give feedback.
-
I'm ok with a
Just habit. I don't trust people to know what is and is not good entropy. :-)
What is a good client side expire time in your opinion? |
Beta Was this translation helpful? Give feedback.
-
This tag should be deprecated as no one wants to implement it. I have tried for 2 years. We can use the TXT tag which many hosts support and add the purpose= verify field i.e remove from phase 7 |
Beta Was this translation helpful? Give feedback.
-
I propose we create a tag for podcast hosts to include an authorization_uri for authorizing ownership of a podcast.
Something like this:
Now anyone that ingests the RSS feed and wants to verify ownership, can pop a web browser to the authorization_uri. The request must include a redirect_uri (e.g. https://www.mypodcasthost.com/authorize/my/parameters?redirect_uri=https://myplayer.com/authorization). The host will receive the request and walk the podcaster through authorization. Once its completed, they redirect to the redirect_uri.
I'm not a mobile developer, but I believe this would work with Universal Links as the redirect_uri.
This is basically a dumbed down version of OAUTH, but would be simple and powerful.
Beta Was this translation helpful? Give feedback.
All reactions