What's new? | Help | Directory | Sign in
Google
                
Search
for
Updated Jan 03, 2008 by zhoushuqun
AttributeExchangeHowTo_zh_CN  
如何使用 Attribute Exchange 扩展传递参数。

Attribute Exchange 教程

依赖方发送 FetchRequest

FetchRequest fetch = FetchRequest.createFetchRequest();

fetch.addAttribute("FirstName", "http://schema.openid.net/namePerson/first", true);
fetch.addAttribute("LastName", "http://schema.openid.net/namePerson/last", true);
fetch.addAttribute("Email", "http://schema.openid.net/contact/email", true);

// wants up to three email addresses
fetch.setCount("Email", 3);

AuthRequest req = _consumerManager.authenticate(discovered, return_to);
req.addExtension(fetch);

OpenID 提供方接受 FetchRequest

if (authReq.hasExtension(AxMessage.OPENID_NS_AX))
{
    MessageExtension ext = authReq.getExtension(AxMessage.OPENID_NS_AX)

    if (ext instanceof FetchRequest)
    {
        FetchRequest fetchReq = (FetchRequest) ext;
        Map required = fetchReq.getAttributes(true);
        Map optional = fetchReq.getAttributes(false);
        // prompt the user
    }
    else if (ext instanceof StoreRequest)
    {
        ...
    }
}

OpenID 提供方发送 FetchResponse

    // data released by the user
    Map userData = new HashMap();
    //userData.put("Email", "user@example.com");

    FetchResponse fetchResp = FetchResponse.createFetchResponse(fetchReq, userData);

    // (alternatively) manually add attribute values
    fetchResp.addAttribute("email", "http://schema.openid.net/contact/email", "user@example.com");

    authSuccess.addExtension(fetchResp);

依赖方接受 FetchResponse

if (authSuccess.hasExtension(AxMessage.OPENID_NS_AX))
{
    MessageExtension ext = authSuccess.getExtension(AxMessage.OPENID_NS_AX);

    if (ext instanceof FetchResponse)
    {
        FetchResponse fetchResp = (FetchResponse) ext;
        
        String firstName = fetcResp.getAttributeValue("FirstName");
        String lastName = fetchResp.getAttributeValue("LastName");
        
        // can have multiple values
        List emails = fetchResp.getAttributeValues("Email");
    }
    else if (ext instanceof StoreResponse)
    {
        ...
    }
}

Sign in to add a comment