Replies: 3 comments 11 replies
-
@Gozala I think we need to look at Verified Credentials for this as a step one, rather than re-inventing. They have a whole DID <> VC thing. From there, we can understand where we store / how we communicate / share VCs. |
Beta Was this translation helpful? Give feedback.
-
Yeah, this is not that different from say, Sign In With Ethereum (SIWE). Self-attestation or ID linking like this is one use case of the facts field 👍 I have on the back burner writing a SIWE spec, but you're right that a more general pattern like proving access to email addresses totally makes sense 💯 |
Beta Was this translation helpful? Give feedback.
-
One thing that have I recognized since writing the post is that it would make more sense if:
{
iss: "did:key:main-service",
aud: "did:key:verifier-service",
att: [
{
can: "access/identify",
with: "did:key:*",
as: "mailto:*"
}
]
}
{
iss: "did:key:verifier-service",
aud: "did:key:user",
att: [
{
can: "access/identify",
with: "did:key:*",
as: "mailto:[email protected]"
}
]
prfs: [
{
iss: "did:key:main-service",
aud: "did:key:verifier-service",
att: [
{
can: "access/identify",
with: "did:key:*",
as: "mailto:*"
}
]
}
]
}
{
iss: "did:key:user",
aud: "did:key:main-service",
att: [
{
can: "access/identify",
with: "did:key:user",
as: "mailto:[email protected]"
},
{
can: "access/identify",
with: "did:key:bakckup-user",
as: "mailto:[email protected]"
}
],
prfs: [
{
iss: "did:key:verifier-service",
aud: "did:key:user",
att: [
{
can: "access/identify",
with: "did:key:*",
as: "mailto:[email protected]"
}
]
prfs: [
{
iss: "did:key:main-service",
aud: "did:key:verifier-service",
att: [
{
can: "access/identify",
with: "did:key:*",
as: "mailto:*"
}
]
}
]
}
]
} Now user has not proved here that they own private key for I am still not exactly happy with all this as there are implicit dependencies which seem bad. I should also probably mention that I was hoping to use this to perform requests from clients for which we do not even have accounts. E.g. if we get request to store some content along with a proof that they have valid email that had been verified, we could just create an account and store that content without roundloops. |
Beta Was this translation helpful? Give feedback.
-
Hi Folks,
I have been trying to design account registration / identification a system in which email verification could be decentralized and I thought I'd tap into collective intelligence of this group as some of you may have already thought about this.
Overview
Goal is to allow a user holding an account e.g.
[email protected]
to identify asdid:key:user
as long as they:[email protected]
.did:key:user
.General idea here is that there could be trusted service(s) with associated DID e.g.
did:key:verifier
that perform email confirmation dance (send a link to the email that user must click) for which they can issue a UCAN proving that service performed confirmation.The way I have been thinking about it is as follows
User sends request (with CID
bafy...req
) todid:key:verifier
with a UCAN claiming thatdid:key:user
holds[email protected]
account e.g.Since issuer is the DID it will be signed via corresponding private key proving that claim is made by DID owner. Verifier service then can send a confirmation email to
[email protected]
. Once user clicks that email verifier can issue derived(?) UCAN:This time UCAN is signed by
did:key:verifier
private key and certifies that it indeed confirmed thatuser:key:user
has access to the[email protected]
account.Why do this ?
Idea here is that second UCAN could be used to register account in e.g web3.storage that would map to the claimed email address and a
did
. Furthermore verifier service could become standalone independent service that many other services could interop.I focused here mostly on email as it's a very common pattern but same technique could be applied to various other identities e.g. keybase.io style social proofs could be implemented as well.
I think wallet auth could even be done without verifier service, simply by signing UCAN with a wallet.
Issues
Something about this approach does not seem right and I can't seem to identify what or how to do better. Specifically there is this relation between first and second UCAN which does not seems to be captured. On one hand if you trust
did:key:verifier
proof isn't really necessary, but on the other hand how do you know that email owner did not just claimed a DID they have no private key for ?I have considered adding separate field into capability instead, however it seems like it would be recreating UCAN proof anyway so that does not seem right either. Maybe something should go into "fct" instead ? Somehow I don't find it to better.
Is this something you have thought about before ? Or maybe have an idea what the right approach is ? If so please provide your insight.
Beta Was this translation helpful? Give feedback.
All reactions